美文网首页
C语言中 字符串处理函数

C语言中 字符串处理函数

作者: 木鱼_cc | 来源:发表于2018-05-17 20:25 被阅读0次

    1.gets函数

    gets(char *s);//参数是一个字符数组
    使用gets和scanf(C++中不建议使用scanf就是因为缓冲区警告)都要注意缓冲区溢出的问题
    scanf回车和空格都默认输入结束,而gets只认回车//gets在新版本被淘汰了

    2.fgets函数

    gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,而fgets函数改进了这个问题。

    由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

    Gets有三个参数,第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin

    Fgets在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。Fgets函数是安全的,不存在缓冲区溢出的问题。

    Fgets(char *s, size_t len, stdin);//stdin是标准输入设备,也可以另填fopen的指针
    
    char s[100] = { 0 };
    fgets(s, sizeof(s), stdin);
    
    

    3.puts函数

    puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’,puts不支持各种转义字符,比如%d,%s都不支持,puts只能简单的直接输出一个字符串,而不能输出char,int,double等其他类型。

        char s[] = "hello world";
        puts(s);
    

    4.fputs函数

    fputs是puts的文件操作版本,第一个参数是一个char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写为stdout

    Fgets不会自动输出一个\n

    char s[] = "hello world";
    fputs(s, stdout);
    

    5.strlen 字符串长度

    查看字符串有效字符个数

    这个库函数需要包含头文件<string.h>

    size_t  strlen(const char * _Str);
    char a[100] = "abcdefg123";
    int len = strlen(a);
    

    返回不包含字符串结尾’\0’的字符串长度

    6.strcat字符串追加

    size_t strcat(char * _Str1, const char * _Str2);

    将参数_Str2追加到_Str1后尾

    存在缓冲区溢出的危险,如果字符串没有足够的空间追加第二个字符串,那么程序就出错了

    7.strncat 字符串有限追加

    size_t len = sizeof(a)-sizeof(b);
    if(len>0)size_t  strncat(char * _Str1, const char * _Str2, size_t len);
    

    8.strcmp 字符串比较

    int strcmp(const char * _Str1, const char * _Str2);

    比较两个字符串是否相等,相等返回0,不等返回非0

    9.strncmp 字符串有限比较

    指定比较两个字符串的前几个字符

    int strncmp(const char * _Str1, const char * _Str2, size_t n);

    n代表指定比较字符串的数量

    10strcpy 字符串拷贝

    char *strcpy(char * _Str1, const char * _Str2);

    将参数_Str2拷贝到参数_Str1中

    Strcpy也存在内存溢出的问题

    11.strncpy字符串有限拷贝

    char *strcpy(char * _Str1, const char * _Str2, size_t n);

    n代表有限拷贝。

    12.sprintf 格式化字符串

    和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

    Sprintf使用方法与printf类似,唯一区别是增加了第一个参数,第一个参数是一个char数组

    sprintf(str,"%d+%d=%d",a,b,a+b);//第二个参数的内容输入到第一个参数中去

    12.1fprintf 按格式输入到文件

    比sprintf少了fputs过程

    fprintf(FILE *p,"%s",char *n);
    fprintf(FILE *p,"%d %d",a1,a2);
    

    用法和printf一样,只是多了第一个参数,参数是打开的文件指针

    char a[] = "hello";
    fprintf(p,"%s",a);
    

    13Sscanf函数(按格式取)

    Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

    Sscanf多了第一个参数,char的数组,sscanf会从这个char的数组中读取相关内容。

    char str[] = "32+67";
    int a,b;
    sscanf(str,"%d+%d",&a,&b);
    printf("a = %d,b = %d\n",a,b);
    
    
    输出a = 32 ,b= 67
    

    13.1fscanf函数(从文件中按格式读取)

    文件p本身格式!
    4+5
    5+6
    
    fscanf(p,"%d+%d",&a1,&a2);
    printf("a1 = %d,a2 = %d\n",a1,a2);
    fscanf(p,"%d+%d",&a1,&a2);//自动下移
    printf("a1 = %d,a2 = %d\n",a1,a2);
    
    输出
    a1 = 4,a2 = 5
    a1 = 5,a2 = 6
    

    14.strchr查找字符

    char * strchr(char * _Str, int _Ch);

    在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;

    15.strstr查找字符串

    char * strstr(char * _Str, const char * _SubStr)

    在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

    16.strtok分割字符串

    字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

        char buf[] = "abc@defg@igk";
        char *p = strtok(buf, "@");;
        while (p)
        {
            printf("%s\n", p);
            p = strtok(NULL, "@");
        }
    

    17. atoi转化为int

    atoi的功能就是把一个char的数组转化为一个int,需要头文件stdlib.h

    char a[] = "123";
    char b[] = "34";
    int a1;
    int b1;
    a1 = atoi(a); //atof atol同理 a to int/float/long的意思
    b1 = atoi(b);
    int c = a1 + b1;
    printf("%d\n",c);
    

    18.atof转化为float

    把一个小数形式的字符串转化为一个浮点数

    19.atol转化为long

    将一个字符串转化为long类型

    C语言并没有把一个int转化成字符串的函数,所以不要尝试使用itoa这种函数
    
    可以用sprintf将一个int,或者其他类型转化为一个字符串。
    
    Itoa可以在VS编译,但在其他系统下就未知了。
    
    

    相关文章

      网友评论

          本文标题:C语言中 字符串处理函数

          本文链接:https://www.haomeiwen.com/subject/tlyidftx.html