字符串函数

目录

读取字符串的函数

1.gets()函数

2.fgets()函数(不是所有的编译器都支持例如CodeBlocks)

3.scanf()函数

4.getchar()函数

输出字符串的函数

1.puts()函数

2.fputs()函数(编译器不一定支持)

3.printf()函数

4.putchar()函数

处理字符串的函数

1.strlen()函数

2.strcat()函数

3.strncat()函数

4.strcmp()函数

5.strncmp()函数

7.strncpy()函数

8.sprintf()函数


读取字符串的函数

1.gets()函数

字符串函数_第1张图片

说明:gets函数简单易用,它读取整行输入,直至遇到换行符,然后丢掉换行符,储存其余字符,并在末尾添加一个空字符使其成为一个C字符串。它经常和puts()函数配对使用。

在使用scanf()输入一个字符后,回车,而下面的gets()函数就直接接收了这个\n,因此无法读取外部输入。

但gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装的下输入行,这可能导致大问题。

2.fgets()函数(不是所有的编译器都支持例如CodeBlocks)

fgets()和gets()的区别:

1.fgets()函数通过的第2个参数指明了读入字符的最大数量。如果给参数的值是n,那么fgets()将读入n-1个字符,或者遇到第一个换行符为止。

2.如果fgets()读到一个换行符,会把它储存到字符串中。这点与gets()不同,gets()会丢弃换行符。

3.fgets()函数第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中。

因为fgets()函数把换行符放在字符串的末尾(假设输入行不溢出),通常要与fputs()函数(和puts()类似)配对使用,除非该函数不在字符串末尾加换行符。fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.scanf()函数

1.scanf以下一个空白字符(空行、空格、制符表或换行符)作为字符串的结束。

2.如果指定了字段宽度,如%10s,那么scanf()将读取10个字符或读到第一个空白字符停止(先满足的条件是结束输入的条件)

字符串函数_第2张图片

4.getchar()函数

getchar()函数一次只能输入一个字符。

字符串函数_第3张图片

输出字符串的函数

1.puts()函数

1.puts()函数在显示字符串时会自动在其末尾添加一个换行符。

2.有双引号括起来的内容是字符串常量(只能是字母和数字,不能是中文),且被视为该字符串的地址。

3.数组名也被看作是地址。

字符串函数_第4张图片

2.fputs()函数(编译器不一定支持)

fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.printf()函数

和puts()函数一样,printf()也把字符串的地址当作参数。虽然printf()函数没有puts()函数那么方便且计算机执行的时间也更长,但它更多才多艺,因为它可以格式化不同的数据类型。

4.putchar()函数

只能输出一个字符,通常与getchar()搭配使用。

处理字符串的函数

C库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中。其中最常用的函数有strlen()、strcat()、strcmp()、strncmp()、strcpy()和strncpy()。另外,还有sprintf()函数,其原型在stdio.h头文件中。

1.strlen()函数

格式:strlen(s);

s可以是字符数组名或是字符串。

用于统计字符串的长度。

字符串函数_第5张图片

2.strcat()函数

格式:strcat(a,b);

a只是字符数组名,b可以是字符数组名或是字符串常量。

strcat()(用于拼接字符串)函数接受两个字符串作为参数,该函数把第2个字符串的备份附加在第1个字符串末尾,并把拼接后形成的新字符串作为第1个字符串,第2个字符串不变。strcat()函数的类型是char*(即,指向char的指针)。该函数返回第1个参数。

字符串函数_第6张图片

3.strncat()函数

格式:strncat(a,b,n);

a只是字符数组名,b可以是字符数组名或是字符串常量,n是一个整型常量。

strcat()函数无法检测第1个数组是否能容纳第2个字符串,当然可以用strlen()查看第1个数组的长度。注意,要给拼接后的字符串长度加1才够空间存放末尾的空字符,或者,用strncat(),该函数的第3个参数指定了最大添加字符数。例如strncat(a,b,10);将b字符串的内容附加给a,在加到第10个字符或遇到字符串时停止。因此,算上空字符(无论哪种情况都要添加空字符),a数组应该足够大,以容纳a字符串(不包括空字符)、10个字符和末尾的空字符。

字符串函数_第7张图片

4.strcmp()函数

格式:strcmp(a,b);

a可以是字符数组名或是字符串常量,b可以是字符数组名或是字符串常量。

比较过程是从两个字符串的起始位置开始,依次比较对应位置上字符的ASCII码值的大小如果ASCII码值相等,则继续比较下一个字符,否则,ASCII码值大的字符串大。直到遇到不同字符或‘\0’时比较结束。

a与b相同时,strcmp(a,b)的值为0;

a大于b时,strcmp(a,b)的值为一个正数;

a小于b时,strcmp(a,b)的值为一个负数;

其它系统可能返回两者的ASCII码之差。

字符串函数_第8张图片

字符串函数_第9张图片

注意:1.该函数比较的是字符串,不是字符,所以其参数应该是字符串(例:”apple“和”A“),而不是字符(‘A’)。

2.strcmp()比较所有的字符,不只是字母。

5.strncmp()函数

格式:strncmp(a,b,n);

用法与strcmp相似,直到第n个字符。

6.strcpy()函数

格式:strcpy(a,b);

功能:把b复制到a中。

a只是字符数组名,b可以是字符数组名或是字符串常量。

a数组的长度应不小于b数组的长度,以保证能够存储b数组。

字符串函数_第10张图片

该函数还有两个有用的属性:

1.strcpy()的返回类型是char*,该函数返回的是的一个参数的值,即一个字符的地址。

2.第1个参数不必指向数组的开始。这个属性可以用于拷贝数组的一部分。

7.strncpy()函数

格式:strncpy(a,b,n);

功能:把字符串b的前n个字符复制到a中。

8.sprintf()函数

格式:sprintf(s,"%s%s",a,b);

该函数声明在stdio.h中,而不是string.h中。该函数与printf()类似,但它是把数据写入字符串,而不是打印在显示器上。因此该函数可以把多个元素组合成一个字符串。sprintf()的第1个参数是目标字符串的地址。其余参数和printf()相同,即格式字符串和代写入项的列表。

功能:1、可以控制精度

char str[20];

double f=14.309948;

sprintf(str,”%6.2f”,f);

2、可以将多个数值数据连接起来

char str[20];

int a=20984,b=48090;

sprintf(str,”%3d%6d”,a,b);

str[]=”20984 48090”

3、可以将多个字符串连接成字符串

char str[20];

char s1[5]={‘A’,’B’,’C’};

char s2[5]={‘T’,’Y’,’x’};

sprintf(str,”%.3s%.3s”,s1,s2);

字符串函数_第11张图片

%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。

 sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:
  
  char* who = “I”;
  char* whom = “CSDN”;
  sprintf(s, “%s love %s.”, who, whom); //产生:“I love CSDN. "
  
  char a1[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’};
  char a2[] = {‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’};
  如果:
  sprintf(s, “%s%s”, a1, a2); //Don’t do that!
  十有八九要出问题了。是否可以改成:
  sprintf(s, “%7s%7s”, a1, a2);
  也没好到哪儿去,正确的应该是:
  sprintf(s, “%.7s%.7s”, a1, a2);//产生:“ABCDEFGHIJKLMN”
  这可以类比打印浮点数的”%m/nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:
  sprintf(s, “%.6s%.5s”, a1, a2);//产生:“ABCDEFHIJKL”
————————————————
有参考过:https://blog.csdn.net/weixin_45525272/article/details/104480563

你可能感兴趣的:(c语言)