首页 理论教育 C语言程序设计中的字符串处理函数

C语言程序设计中的字符串处理函数

时间:2023-10-29 理论教育 版权反馈
【摘要】:C语言中有丰富的字符串处理函数,主要有字符串的输入、输出、合并、修改、比较、转换、复制、搜索这几类。字符串输入输出函数包含在“"stdio.h"”头文件中,其他字符串函数包含在“"string.h"”头文件中,使用时应用“#include”命令将其包含到本程序中来。下面介绍几个最常用的字符串函数。连接两个字符串。

C语言程序设计中的字符串处理函数

C语言中有丰富的字符串处理函数,主要有字符串的输入、输出、合并、修改、比较、转换、复制、搜索这几类。使用这些函数可以大大减轻编程的负担。

字符串输入输出函数包含在“"stdio.h"”头文件中,其他字符串函数包含在“"string.h"”头文件中,使用时应用“#include”命令将其包含到本程序中来。下面介绍几个最常用的字符串函数。

1.字符串输出函数puts()

一般形式:puts(字符型数组名)

功能:输出字符型数组中的所有字符(即字符串)。

例如:

char c[10]="china";

puts(c);

“puts(c);”相当于“printf("%s\n",c);”。

与下列程序段功能相同:

i=0;

while(c[i]!=′\0′)

putchar(c[i++]);

 putchar(′\n′);

【例5.13】输出一个字符串。

程序内容如下:

1 #include<stdio.h>

2 int main()

3 {

4  char ch[]="shandong\njinan";

5  puts(ch);

6  return 0;

7 }

程序结果如图5.14所示:

图5.14 例5.13程序结果图

【例题中关键问题说明】

从程序中可以看出,puts()函数中可以使用转义字符,因此输出结果成为两行。用puts()函数输出字符串时遇到′\0′结束。puts()函数完全可以由printf()函数取代。当需要按一定格式输出时,通常使用printf()函数。

2.字符串输入函数gets()

一般形式:gets(字符型数组名)

功能:读取从键盘上输入的一个字符串,存入字符型数组中。本函数的返回值为该字符型数组的首地址

“gets(c)”相当于“scanf("%s",c);”。

【例5.14】输入一个字符串,然后再输出。

程序内容如下:

1 #include<stdio.h>

2 int main()

3 {

4  char ch[15];

5  printf("Input string:");

6  gets(ch);

7  puts(ch);

8  return 0;

9 }

程序结果如图5.15所示:

图5.15 例5.14程序结果图

【例题中关键问题说明】

可以看出,当输入的字符串中含有空格时,输出仍为全部字符串。同时,也说明gets()函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这一点与()函数是不同的。

需要注意:用puts()和gets()函数只能输出或输入一个字符串,即puts()和gets()函数的参数只能有一个。“puts(ch1,ch2);”或“gets(ch1,ch2);”都是错误的。

3.字符串连接函数strcat()

一般形式:strcat(字符数组名,字符串表达式)

功能:把字符串表达式中的字符串连接到字符数组中字符串的后面,形成一个新的字符串。本函数返回值是字符数组的首地址。

【例5.15】连接两个字符串。

程序内容如下:

1 #include<stdio.h>

2 #include<string.h>

3 int main()

4 {

5  char ch1[20]="Welcome to";

6  char ch2[10];

7  printf("input your name:");

8  gets(ch2);

9  strcat(ch1,ch2);

10  puts(ch1);

11  return 0;

12 }

程序结果如图5.16所示:

图5.16 例5.15程序结果图

本程序把初始化的字符数组与动态赋值的字符串连接起来。要注意的是,字符数组大小的定义应足以能容纳连接后的字符串。

4.字符串复制函数strcpy()

格式:strcpy(字符数组名,字符串表达式)

功能:把字符串表达式中的值复制到字符数组中,包括字符串结束标志′\0′。该函数的返回值是字符型数组的首地址。

【例5.16】复制一个字符串。

程序内容如下:

1 #include<stdio.h>

2 #include<string.h>

3 int main()

4 {

5  char ch1[15]="abcdefghijklmn",ch2[]="C Language";(www.xing528.com)

6  strcpy(ch1,ch2);

7  puts(ch1);

8  printf("\n");

9  return 0;

10 }

程序结果如图5.17所示:

图5.17 例5.16程序结果图

【例题中关键问题说明】

因为字符数组ch2的串结束标志′\0′也一同复制到字符数组ch1,所以ch1的值为:

"C Language\0lmn\0"

在输出ch1时遇到第一个′\0′则输出结束。

需要注意:

(1)该函数要求字符数组应有足够的空间存放被复制的字符串。

(2)不能用赋值语句将一个字符型常量或者一个字符型数组直接赋值给另一个字符型数组,而只能用strcpy()函数将一个字符串或字符型数组赋值到另一个字符型数组中去。

如果ch1和ch2是两个字符型数组,那么“ch1="English";”和“ch1=ch2;”都是错误的;正确的是:“strcpy(ch1,"English");”和“strcpy(ch1,ch2);”。

(3)也可以使用strcpy()函数复制字符串的一部分。如:

char c[10]="12345";

strcpy(c,"abc",2);

puts(c);

执行结果:ab345。

可见,strcpy()函数可以复制一部分内容(不包括′\0′)。

5.字符串比较函数strcmp()

格式:strcmp(字符数组名1,字符数组名2)

功能:从左向右依次对应比较两个字符串中的字符,当出现不同字符时比较结束,返回不相同字符的ASCII码差值。

因此,返回值>0时,字符串1>字符串2;返回值=0时,字符串1=字符串2;返回值<0时,字符串1<字符串2。

本函数中的两个参数可以是字符数组名,也可以是字符串常量。

例如:

“strcmp("abcedf","abcdef")”的值为1,是字符′e′与字符′d′的ASCII码差值。

【例5.17】比较两个字符串的大小。

程序内容如下:

1 #include<stdio.h>

2 #include<string.h>

3 int main()

4 {

5  int n;

6  char ch1[15],ch2[]="China Beijing";

7  printf("ch2:");

8  puts(ch2);

9  printf("input ch1:");

10  gets(ch1);

11  n=strcmp(ch1,ch2);

12  if(n>0)printf("ch1>ch2\n");

13  if(n==0)printf("ch1=ch2\n");

14  if(n<0)printf("ch1<ch2\n");

15  return 0;

16 }

程序结果如图5.18所示:

图5.18 例5.17程序结果图

【例题中关键问题说明】

本程序中把输入的字符串和数组ch2中的字符串作比较,比较结果返回到n中,根据n值再输出结果提示串。当输入为“Ajlksikkd”时,不同的字符是“A”和“C”,由ASCII码可知“A”小于“C”,故n=-2<0,输出结果“ch1<ch2”。

6.测字符串长度函数strlen()

格式:strlen(字符数组名)

功能:测字符串的实际长度(不含字符串结束标志′\0′),并作为函数返回值。

例如:

“strlen("China")”的值是5,而不是6。

【例5.18】测一字符串长度。

程序内容如下:

1 #include<stdio.h>

2 #include<string.h>

3 int main()

4 {

5  int n;

6  char ch[]="telephone number";

7  n=strlen(ch);

8  puts(ch);

9  printf("The length of the string is%d\n",n);

10  return 0;

11 }

程序结果如图5.19所示:

图5.19 例5.18程序结果图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈