c语言的字符串处理函数大全:gets、puts、fgets、fputs、scanf、printf、strlen、strcpy、strcmp、strcat、sprintf、sscanf等

一、字符串的输入和输出函数-集锦

  • 1 - getsputs

    • gets函数------格式char *gets(char *s);
      • 1、可以接收空格,直到出现换行符或读到文件结尾为止。
           char arr[1];
           gets(arr);
           printf("%s", arr);
           // 输入h后按下回车键,程序报错,出现字符数组越界的情况,原因是gets接收字符串,在接收h后自动在后面加入\0字符串结束标识。因此字符串长度为2,导致越界。
        
      • 2、getsscanf的区别:
        • gets函数可以接收空格
        • scanf函数默认以空格和回车作为结束标志。
    • puts函数------格式int puts(const char *s);
      • 会在输出字符串结束后自动输处换行\n

  • 2 - fgetsfputs函数

    • fgets函数------格式char *fgets(char *s, int size, FILE *stream);
      • stream指定的文件内读入字符,保存到s所指定的内存空间,直到出现换行字符、读到文件结尾或是已读了size - 1个字符为止,最后会自动加上字符 \0 作为字符串结束。
      • size:指定最大读取字符串的长度(size - 1)
      • stream:文件指针,如果读键盘输入的字符串,固定写为stdin
      • 1、可以接收空格,当输入的字符长度小于指定的长度时,会连\n也读入进去,再加上字符串结束标志\0,当输入的字符长度大于等于指定的长度是,只会读取n-1个字符,再加上字符串结束标志\0,不会再读入回车\n
    • fputs函数------格式int fputs(const char * str, FILE * stream);
      • str所指定的字符串写入到stream指定的文件中, 字符串结束符 \0 不写入文件。
      • stream:文件指针,如果把字符串输出到屏幕,固定写为stdout
      • 1、fputs函数不会自动输出\n

  • 3 - scanfprintf函数

    • scanf函数------格式int scanf(const char * __restrict__ _Format,...)
      • 接收从控制台输入的字符或字符串
      • 1、以空格或者回车作为结束标志
      • 2、严格的输入格式,双引号中写什么格式,输入时就要什么格式
            // 1、scanf接收数据时,建议不要添加任何字符,空格除外,输入1 2 3回车,或者1回车2回车3回车
            int a,b,c;
            scanf("%d %d %d", &a,&b,&c);
            // 2、定义格式化是什么格式,输入就得是什么格式,输入时必须得是:a=1,b=2,c=3格式
            int a,b,c;
            scanf("a=%d,b=%d,c=%d", &a,&b,&c);
            // 2、接收整型,有限定字符宽度的格式化,输入123456789,输出的是a=1,b=23,c=456
            int a,b,c;
            scanf("%1d%2d%3d", &a,&b,&c);
            // 3、接收字符型,有限定字符宽度的格式化,输入abcdefghijklmn,输出的是arr1=abcd,arr2=ef
            char arr1[100],arr2[100];
            scanf("%4s%2s", arr1, arr2);
            // 2、定义格式化输入""中有空格,输入一个数后输入空格或者回车不会结束,必须输入两个数才能结束
            int a;
            scanf("%d ", &a);
            // 3、定义格式化输入""中有\n,输入一个数后输入空格或者回车不会结束,必须输入两个数才能结束
            int a;
            scanf("%d\n", &a);
            // 4、想让scanf接收空格,这样的意思是:接收字符,直到碰到\n停止
            char arr[100];
            scanf("%[^\n]", arr);
            // 5、想让scanf碰到数字就结束,输入123abc,接收结果为:没有接收任何字符,数组中的值还是初始化的值,输入abc123efg456,接收结果为:接收abc,再加上\0结束标志
            char arr[100];
            scanf("%[^0-9]", arr);
            // 6、屏蔽字符`%*d`--屏蔽数字,输入abc123efg456,什么也不接收,因为字符串以字母开头,输入123abc456efg,接收abc456efg,再加上\0结束标志,总结一句话:遇见*,得按照它的格式输入,否则什么也不接收
            char arr[100];
            scanf("%*d%s", arr);
            // 7、屏蔽字符`%*c`--屏蔽一个字符,输入abc123efg456,接收bc123efg456,输入123abc456efg,接收23abc456efg
            char arr[100];
            scanf("%*c%s", arr);
            // 8、屏蔽字母a-z,格式:`%*[a-z]`,输入123abc456,什么也不接收,输入abc123efg456,接收123efg456
            char arr[100];
            scanf("%*[a-z]%s", arr);
        
      • printf函数------格式:int printf(const char * __restrict__ _Format,...);
        • 1、格式化输出-字符串,.前为补空格
              // 输出为【  he】
              char arr[] = "he";
              printf("%4s", arr);
              //printf("%04s", arr); // 不够前补0,输出【00he】
              //printf("%4s", "abcefg"); // 原样输出
          
        • 2、格式化输出-字符串,.后为截取
              printf("%.4s", "abcdefg"); // 输出为abcd
          

  • 4 - strlen函数

    • 需要导入头文件#include
    • 计算字符串的有效长度,不包括\0
    • 如果一个字符数组没有包括\0,那么它的计算长度,为直到找到\0为止
         char arr[] = {'h', 'e', 'l', 'l', 'o'}
         printf("%d", strlen(arr)) // 计算结果为直到找到`\0`为止
      

  • 5 - strcpy函数------格式:char *strcpy(char *dest, const char *src);

    • 需要导入头文件#include
    • 将源字符串复制到目的字符串中,复制时,复制字符串结束标志\0
  • 6 - strnapy函数------格式:char *strncpy(char *dest, const char *src, size_t n);

    • 把src指向字符串的前n个字符复制到dest所指向的空间中,是否拷贝结束符看指定的长度是否包含’\0’。

  • 7 - strcat函数------格式:char *strncat(char *dest, const char *src);

    • 需要导入头文件#include
    • 将src字符串前n个字符连接到dest的尾部,\0也会追加过去,注意:在追加的过程中,dest的字符数组长度要能够容的下追加后的字符和\0
  • 8 - strncat函数------格式:char *strncat(char *dest, const char *src, size_t n);

    • 将src字符串前n个字符连接到dest的尾部,\0也会追加过去

  • 9 - strcmp函数------格式:int strcmp(const char *s1, const char *s2);

    • 比较 s1 和 s2 的大小,遇到\0结束比较,比较的是字符ASCII码大小。
    • 等于为0,大于为>0,小于为<0
          char arr1[] = "abcd\0ef";
          char arr2[] = "abcd";
          int val = strcmp(arr1, arr2); // 返回结果为相等0
      
  • 10 - strncmp函数------格式:int strncmp(const char *s1, const char *s2, size_t n);

    • 比较 s1 和 s2 前n个字符的大小,遇到\0结束比较,比较的是字符ASCII码大小。

  • 11 - sprintf函数------格式:int sprintf(char *str, const char *format, ...);

    • 根据参数format字符串格式化数据,然后将结果输出到str指定的空间中,直到出现字符串结束符 ‘\0’ 为止。
          int a=1,b=2;
          char arr[100];
          sprintf(arr, "a=%d b=%d", a,b); // arr的结果为"a=1 b=2"
      
  • 12 - sscanf函数------格式:int sscanf(const char *str, const char *format, ...);

    • 从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。
          char arr[] = "a=1,b=2";
          int c,d;
          sscanf(arr, "a=%d,b=%d",&c,&d); // 结果为c=1 d=2
      

  • 13 - strchr函数------格式:char *strchr(const char *s, int c);

    • 在字符串s中查找字母c出现的位置,成功返回第一次出现的c地址,失败返回NULL
  • 14 - strstr函数------格式:char *strstr(const char *s1, const char *s2);

    • 在字符串s1中查找字符串s2出现的位置,成功返回第一次出现的s2地址,失败返回NULL

  • 15 - strtok函数------char *strtok(char *str, const char *delim);

    • 来将字符串分割成一个个片段。当strtok()在参数str的字符串中发现参数delim中包含的分割字符时, 则会将该字符改为\0 字符,当连续出现多个时只替换第一个为\0。当首字母出现要分割的字符时,忽略首字母,不把首字母换成\0字符,继续向下寻找,直到找到要分割的字符为止。
    • 当要分割的字符为多个时,例如"w.",碰见w.都分割
    • 分割成功后返回分割字符串的首地址,失败返回NULL
    • 在第一次调用时:strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL,每次调用成功则返回指向被分割出片段的指针
      char arr[] = "http://www.baidu.com";
      char *p = strtok(arr, ":");
      while(p!=NULL){
        printf("%s\n", p);
        p = strtok(NULL, "w.");
      }
      

  • 16 - atoi、atof、atol函数------格式:int atoi(const char *nptr);

    • atoi()会扫描nptr字符串,跳过前面的空格字符,直到遇到数字或正负号才开始做转换,而遇到非数字或字符串结束符(\0)才结束转换,并将结果作为返回值。
    • atoi将字符串转换为int类型
    • atof将字符串转换为double类型
    • atol将字符串转换为long类型

你可能感兴趣的:(c++逆袭之路,c语言,c++,字符串)