C语言程序设计重庆大学课件第07章字符串及其应用.ppt

上传人:ni****g 文档编号:569488369 上传时间:2024-07-29 格式:PPT 页数:57 大小:2.11MB
返回 下载 相关 举报
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第1页
第1页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第2页
第2页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第3页
第3页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第4页
第4页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《C语言程序设计重庆大学课件第07章字符串及其应用.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计重庆大学课件第07章字符串及其应用.ppt(57页珍藏版)》请在金锄头文库上搜索。

1、程序设计技术程序设计技术n nC C C C语言数据描述和语言数据描述和语言数据描述和语言数据描述和C C C C程序设计初步程序设计初步程序设计初步程序设计初步 n n结构化程序设计基础和结构化程序设计基础和结构化程序设计基础和结构化程序设计基础和C C C C语言的控制结构语言的控制结构语言的控制结构语言的控制结构 n n数组及其应用数组及其应用数组及其应用数组及其应用 n n函数与函数与函数与函数与C C C C程序结构程序结构程序结构程序结构 n n指针与函数指针与函数指针与函数指针与函数 n n指针与数组指针与数组指针与数组指针与数组 n n字符串及其应用字符串及其应用字符串及其应用

2、字符串及其应用 n n结构体类型和联合体类型结构体类型和联合体类型结构体类型和联合体类型结构体类型和联合体类型 n nC C C C语言的文件处理及其应用语言的文件处理及其应用语言的文件处理及其应用语言的文件处理及其应用 n n位运算与枚举类型位运算与枚举类型位运算与枚举类型位运算与枚举类型字符串及其应用字符串及其应用 n nC C语言的字符串表示方法语言的字符串表示方法语言的字符串表示方法语言的字符串表示方法 n n字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数 7.1.1 7.1.1 字符串表示方法字符串表示

3、方法n n字符数组字符数组 C C C C语言只有字符串常量,没有语言只有字符串常量,没有语言只有字符串常量,没有语言只有字符串常量,没有字符串变量字符串变量字符串变量字符串变量,对字,对字,对字,对字符串的处理是使用字符数组实现。用于存放每一符串的处理是使用字符数组实现。用于存放每一符串的处理是使用字符数组实现。用于存放每一符串的处理是使用字符数组实现。用于存放每一个字符数据的数组称为字符数组。个字符数据的数组称为字符数组。个字符数据的数组称为字符数组。个字符数据的数组称为字符数组。 字符数组的定义:字符数组的定义:字符数组的定义:字符数组的定义:char char char char 数组

4、名数组名数组名数组名 长度长度长度长度 注意:注意:注意:注意:存放字符串时要使用空字符存放字符串时要使用空字符存放字符串时要使用空字符存放字符串时要使用空字符 0000 作为字作为字作为字作为字符串的结束符号符串的结束符号符串的结束符号符串的结束符号,所以定义字符数组时,应使字,所以定义字符数组时,应使字,所以定义字符数组时,应使字,所以定义字符数组时,应使字符数组长度大于或等于字符串长度加符数组长度大于或等于字符串长度加符数组长度大于或等于字符串长度加符数组长度大于或等于字符串长度加1 1 1 1。 例如例如: char str7=: char str7=”abcdabcd” a b c

5、d 0 0 0str图图图图7.2 7.2 数组名与其初始化值之间的对应关系数组名与其初始化值之间的对应关系数组名与其初始化值之间的对应关系数组名与其初始化值之间的对应关系数组名数组名数组名数组名strstrstrstr是地址常量是地址常量是地址常量是地址常量7.1.1 7.1.1 字符串表示方法字符串表示方法n n指向字符变量的指针(串指针指向字符变量的指针(串指针) ) 定义字符指针变量,并将字符串或字符串常定义字符指针变量,并将字符串或字符串常定义字符指针变量,并将字符串或字符串常定义字符指针变量,并将字符串或字符串常量的首地址赋给该指针变量。即字符指针变量量的首地址赋给该指针变量。即字

6、符指针变量量的首地址赋给该指针变量。即字符指针变量量的首地址赋给该指针变量。即字符指针变量指向一个字符串。指向一个字符串。指向一个字符串。指向一个字符串。 例如例如例如例如: : : : char *sPtr=char *sPtr=char *sPtr=char *sPtr=“ “abcdabcdabcdabcd” ”; ; ; ; sPtr=sPtr=sPtr=sPtr=“ “1234123412341234” ”; ; ; ; 首先在系统内存中分配一段连续的存储区域首先在系统内存中分配一段连续的存储区域首先在系统内存中分配一段连续的存储区域首先在系统内存中分配一段连续的存储区域并存放指定的

7、字符串常量,然后将该存储区域并存放指定的字符串常量,然后将该存储区域并存放指定的字符串常量,然后将该存储区域并存放指定的字符串常量,然后将该存储区域的起始地址(字符串常量的首地址)赋值给字的起始地址(字符串常量的首地址)赋值给字的起始地址(字符串常量的首地址)赋值给字的起始地址(字符串常量的首地址)赋值给字符指针变量符指针变量符指针变量符指针变量sPtrsPtrsPtrsPtr。 赋值语句赋值语句赋值语句赋值语句sPtr=sPtr=sPtr=sPtr=” ”1234123412341234” ”;使指针变量使指针变量使指针变量使指针变量sPtrsPtrsPtrsPtr由由由由指向字符串指向字符

8、串指向字符串指向字符串” ”abcdabcdabcdabcd” ”改为指向字符串改为指向字符串改为指向字符串改为指向字符串” ”1234123412341234” ”。 a b c d 0sPtra) a) 指针变量指向字符串常量指针变量指向字符串常量a b c d 0a b c d 0sPtrb)b) 指针变量改变原指向指向另一字符串指针变量改变原指向指向另一字符串1 2 3 4 0图图7.1 7.1 指针变量与字符串数据对象的关系示意图指针变量与字符串数据对象的关系示意图7.1.1 7.1.1 字符串表示方法字符串表示方法n n字符数组的初始化字符数组的初始化字符数组的初始化字符数组的初始

9、化 n n使用单个字符常量使用单个字符常量使用单个字符常量使用单个字符常量 char s29=H, e, a, d ; char s3=N, e, w, , Y, e, a, r;n n使用字符串常量使用字符串常量使用字符串常量使用字符串常量 系统自动在字符串的结尾加上结束符号系统自动在字符串的结尾加上结束符号系统自动在字符串的结尾加上结束符号系统自动在字符串的结尾加上结束符号 0000 ,但仍需,但仍需,但仍需,但仍需注意数组长度的问题。注意数组长度的问题。注意数组长度的问题。注意数组长度的问题。C C C C语言还允许初始化一维字符数组时不使用花括号括住字语言还允许初始化一维字符数组时不使

10、用花括号括住字语言还允许初始化一维字符数组时不使用花括号括住字语言还允许初始化一维字符数组时不使用花括号括住字符串常量。符串常量。符串常量。符串常量。 char s180= New Year; char s280= New Year; char s3=New Year; /此时字符数组的长度为此时字符数组的长度为此时字符数组的长度为此时字符数组的长度为9 9 9 9char s1=“abcd”;char *s2=“abcd”;char s110,*s2;s1=“abcd”; Xs2=“abcd”; 比比 较较char s110,*s2;gets(s1);gets(s2); Xchar *s2;

11、s2=(char *)malloc(10);gets(s2);比较比较 字符数组与字符指针的区别字符数组与字符指针的区别7.1.1 7.1.1 字符串表示方法字符串表示方法7.1.2 7.1.2 字符串的输入输出字符串的输入输出n n使用使用使用使用scanfscanfscanfscanf、printfprintfprintfprintf函数函数函数函数n n使用格式控制符使用格式控制符使用格式控制符使用格式控制符%c%c%c%c可以通过单个字符方式输入输出字可以通过单个字符方式输入输出字可以通过单个字符方式输入输出字可以通过单个字符方式输入输出字符数组。符数组。符数组。符数组。( ( ( (

12、char a7,b8,c5;char a7,b8,c5;char a7,b8,c5;char a7,b8,c5;) ) ) ) for (i=0;i6;i+) scanf( for (i=0;i6;i+) scanf( for (i=0;i6;i+) scanf( for (i=0;i6;i+) scanf(“ “%c%c%c%c” ”,&ai);,&ai);,&ai);,&ai); for (i=0;i6;i+) printf( for (i=0;i6;i+) printf( for (i=0;i6;i+) printf( for (i=0;i6;i+) printf(“ “%c%c%c%c

13、” ”,ai);,ai);,ai);,ai);n n使用格式控制符使用格式控制符使用格式控制符使用格式控制符%s%s%s%s可以将整个字符串一次输入输出,可以将整个字符串一次输入输出,可以将整个字符串一次输入输出,可以将整个字符串一次输入输出,并且并且并且并且一次一次一次一次可以输入输出可以输入输出可以输入输出可以输入输出多个多个多个多个字符串。字符串。字符串。字符串。 (函数参数为(函数参数为(函数参数为(函数参数为字符数组名字符数组名字符数组名字符数组名或或或或串指针串指针串指针串指针) scanf(scanf(scanf(scanf(“ “%s%s%s%s” ”,a); /*,a); /

14、*,a); /*,a); /*整体输入一个字符串整体输入一个字符串整体输入一个字符串整体输入一个字符串* * * */ / / / printf( printf( printf( printf(“ “%s%s%s%s” ”,a); /*,a); /*,a); /*,a); /*整体输出一个字符串整体输出一个字符串整体输出一个字符串整体输出一个字符串* * * */ / / / n n使用使用使用使用getsgetsgetsgets、putsputsputsputs函数函数函数函数 (函数参数为(函数参数为(函数参数为(函数参数为字符数组名字符数组名字符数组名字符数组名或或或或串指针串指针串指针

15、串指针) ) ) )使用使用使用使用getsgetsgetsgets和和和和putsputsputsputs函数函数函数函数一次一次一次一次可以输入输出可以输入输出可以输入输出可以输入输出一个一个一个一个字符串。字符串。字符串。字符串。7.1.2 7.1.2 字符串的输入输出字符串的输入输出n nScanfScanfScanfScanf和和和和getsgetsgetsgets函数的区别函数的区别函数的区别函数的区别n n一次调用能够输入的字符串个数不同一次调用能够输入的字符串个数不同一次调用能够输入的字符串个数不同一次调用能够输入的字符串个数不同 gets(str); /*gets(str);

16、 /*gets(str); /*gets(str); /*输入输入输入输入1 1 1 1个个个个字符串字符串字符串字符串* * * */ / / / scanf( scanf( scanf( scanf(“ “%s%s%s%s%s%s%s%s%s%s%s%s” ”,a,b,c);/*,a,b,c);/*,a,b,c);/*,a,b,c);/*输入输入输入输入多个多个多个多个字符串字符串字符串字符串( ( ( (空格分隔空格分隔空格分隔空格分隔)*/ )*/ )*/ )*/ n n空格字符的处理不同空格字符的处理不同空格字符的处理不同空格字符的处理不同 gets gets gets gets 输

17、入字符串中输入字符串中输入字符串中输入字符串中可含有空格字符。可含有空格字符。可含有空格字符。可含有空格字符。 scanfscanfscanfscanf 输入字符串中输入字符串中输入字符串中输入字符串中不能含空格字符。不能含空格字符。不能含空格字符。不能含空格字符。n nprintfprintfprintfprintf和和和和putsputsputsputs函数的区别函数的区别函数的区别函数的区别n n一次调用能够输出的字符串个数不同一次调用能够输出的字符串个数不同一次调用能够输出的字符串个数不同一次调用能够输出的字符串个数不同 puts(str1) /*puts(str1) /*puts(s

18、tr1) /*puts(str1) /*输出输出输出输出1 1 1 1个个个个字符串字符串字符串字符串* * * */ / / / printf( printf( printf( printf(“ “%sn%s%sn%s%sn%s%sn%s” ”,str1,str2); /*,str1,str2); /*,str1,str2); /*,str1,str2); /*输出输出输出输出多个多个多个多个字符串字符串字符串字符串* * * */ / / /n n输出数据换行处理方式不同输出数据换行处理方式不同输出数据换行处理方式不同输出数据换行处理方式不同 putsputsputsputs函数函数函数函

19、数 输出字符串后输出字符串后输出字符串后输出字符串后会自动换行;会自动换行;会自动换行;会自动换行; printfprintfprintfprintf函数函数函数函数 输出字符串后输出字符串后输出字符串后输出字符串后不自动换行;不自动换行;不自动换行;不自动换行; 例例7-27-2 将字符串中小写字母转变成大写字母将字符串中小写字母转变成大写字母将字符串中小写字母转变成大写字母将字符串中小写字母转变成大写字母#include void main() char string100,*p;printf(Please input a string:);gets(string);p=string;wh

20、ile(*p!=0) if(*p=a &*p=z) *p-=32; p+;printf(The new string is: );puts(string);7.1.2 7.1.2 字符串的输入输出字符串的输入输出例例例例7-17-17-17-1 程序演示程序演示程序演示程序演示 p pa b c d e f g 0a b c d e f g 0stringstringP+P+*p*pA A B B*p*p字符串及其应用字符串及其应用 nC语言的字符串表示方法语言的字符串表示方法 n字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数 字符串的常用处理方法及标准库函数字符串的常用处理

21、方法及标准库函数n n字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计n n字符串的复制字符串的复制字符串的复制字符串的复制n n字符串的连接字符串的连接字符串的连接字符串的连接n n字符串中字符的查找字符串中字符的查找字符串中字符的查找字符串中字符的查找n n字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除n n字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找n n字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删

22、除n n字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组7.2.1 7.2.1 字符串中有效字符的统计字符串中有效字符的统计n测试字符串的长度测试字符串的长度 统计字符串中包含的有效字符个数。统计字符串中包含的有效字符个数。统计字符串中包含的有效字符个数。统计字符串中包含的有效字符个数。即从字符串即从字符串即从字符串即从字符串的第一个字符开始,依次向后判断该字符是否字的第一个字符开始,依次向后判断该字符是否字的第一个字符开始,依次向后判断该字符是否字的第一个字符开始,依次向后判断该字符是否字符串结束符符串结束符符串结束符符串结束符 0000 ,若不是则予以统计,

23、直到遇,若不是则予以统计,直到遇,若不是则予以统计,直到遇,若不是则予以统计,直到遇到到到到 0000 为止。为止。为止。为止。n标准测试字符串长度函数标准测试字符串长度函数strlenstrlen 函数原型函数原型函数原型函数原型: : : :在在在在中中中中 size_t strlen(const char *string)size_t strlen(const char *string)size_t strlen(const char *string)size_t strlen(const char *string) 其中:其中:其中:其中:size_tsize_tsize_tsize_

24、t表示表示表示表示整型整型整型整型数据类型数据类型数据类型数据类型 函数调用:函数调用:函数调用:函数调用:strlen(str)strlen(str)strlen(str)strlen(str); 功能:功能:功能:功能:测试测试测试测试strstrstrstr的字符串长度。返回值为字符串的的字符串长度。返回值为字符串的的字符串长度。返回值为字符串的的字符串长度。返回值为字符串的实际长度,不包括结束字符实际长度,不包括结束字符实际长度,不包括结束字符实际长度,不包括结束字符 0000 。7.2.1 7.2.1 字符串中有效字符的统计字符串中有效字符的统计数组方式统计字符串长度数组方式统计字符

25、串长度数组方式统计字符串长度数组方式统计字符串长度int strlength(char s)int strlength(char s)int strlength(char s)int strlength(char s) int i;int i;int i;int i;for(i=0;si!=0;i+for(i=0;si!=0;i+for(i=0;si!=0;i+for(i=0;si!=0;i+) ) ) ); ; ; ;return i;return i;return i;return i; 指针方式统计字符串长度指针方式统计字符串长度指针方式统计字符串长度指针方式统计字符串长度int str

26、length(char int strlength(char int strlength(char int strlength(char *s)*s)*s)*s) int i=0;int i=0;int i=0;int i=0;while(*s)while(*s)while(*s)while(*s) i+,s+; i+,s+; i+,s+; i+,s+;return i;return i;return i;return i; 例例例例7-37-37-37-3 编制求字符串长度函数并用主函数进行测试编制求字符串长度函数并用主函数进行测试编制求字符串长度函数并用主函数进行测试编制求字符串长度函数并

27、用主函数进行测试*s!=*s!=*s!=*s!= 0000 移动指针移动指针移动指针移动指针7.2.1 7.2.1 字符串中有效字符的统计字符串中有效字符的统计例例例例7-57-57-57-5 编程序实现功能:判断输入字符串是否回文。编程序实现功能:判断输入字符串是否回文。编程序实现功能:判断输入字符串是否回文。编程序实现功能:判断输入字符串是否回文。 回文回文回文回文: : : :左读或右读都相同。如:左读或右读都相同。如:左读或右读都相同。如:左读或右读都相同。如:levellevellevellevel是回文。是回文。是回文。是回文。l e v e l 0 wordwordfor(;he

28、adend;head+,end-)for(;headend;head+,end-)for(;headend;head+,end-)for(;headend;head+,end-)ifififif(*head(*head(*head(*head!=!=!=!=*end*end*end*end) ) ) ) flag=0; flag=0; flag=0; flag=0; break;break;break;break; if(flag) if(flag) if(flag) if(flag) printf( printf( printf( printf( %s%s%s%s是回文!是回文!是回文!是回

29、文!,word);,word);,word);,word);else else else else printf(%s printf(%s printf(%s printf(%s不是回文!不是回文!不是回文!不是回文!,word);,word);,word);,word);headheadendendheadhead endenda b c d e 0a b c d e 0字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数n n字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计n n字符串的复制字符串的复制字符串的复制字符串的复制n n字符串

30、的连接字符串的连接字符串的连接字符串的连接n n字符串中字符的查找字符串中字符的查找字符串中字符的查找字符串中字符的查找n n字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除n n字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找n n字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除n n字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组7.2.2 7.2.2 字符串的复制字符串的复制 n n标准字符串复制函数标准字符串复制

31、函数strcpystrcpy 函数原型:函数原型:在在中中 char *strcpy(char *strDestination,const *strSource)char *strcpy(char *strDestination,const *strSource)char *strcpy(char *strDestination,const *strSource)char *strcpy(char *strDestination,const *strSource) 函数调用:函数调用:strcpy(str1,str2);strcpy(str1,str2); 功能:功能:将字符串将字符串str2

32、str2拷贝到字符串拷贝到字符串str1str1中,中,函数返回字符串函数返回字符串str1str1。其中,字符数组。其中,字符数组str1str1必须定义足够大,必须定义足够大,str2str2可以是字符串常量。可以是字符串常量。 例例例例7-77-77-77-7 使用标准函数使用标准函数使用标准函数使用标准函数strcpystrcpystrcpystrcpy实现字符串的拷贝实现字符串的拷贝实现字符串的拷贝实现字符串的拷贝 例例例例7-67-67-67-6 编制字符串复制函数并用相应主函数测试编制字符串复制函数并用相应主函数测试编制字符串复制函数并用相应主函数测试编制字符串复制函数并用相应主

33、函数测试字符数组方式实现字符数组方式实现字符串拷贝字符串拷贝void strcopy(char s,char t)void strcopy(char s,char t) int i;int i;for(i=0;ti!=0;i+)for(i=0;ti!=0;i+)si=ti;si=ti;si=0;si=0; 7.2.2 7.2.2 字符串的复制字符串的复制 指针方式实现字符串拷贝指针方式实现字符串拷贝char *strcopy(char *s,char char *strcopy(char *s,char *t)*t) char char *p=s;*p=s;while(*s+=*t+)!=0)

34、while(*s+=*t+)!=0); ;return return p p; ; 7.2.2 7.2.2 字符串的复制字符串的复制 保存保存保存保存s s s s的首地址到的首地址到的首地址到的首地址到p p p p*t*t*t*t的的的的 0000 先赋给先赋给先赋给先赋给* * * *s s s s再判断是否等于再判断是否等于再判断是否等于再判断是否等于 0000 a b c d e 0 s1s1s2s2p pt ta a b bt ts sc d e 0c d e 0s st ts sn n使用标准字符串复制函数的注意点使用标准字符串复制函数的注意点字符串复制函数使用的字符数组字符串复

35、制函数使用的字符数组形参形参本本质上是一个质上是一个指针量指针量,对应的,对应的实参实参必须是必须是地址量地址量。可以将实参字符数组可以将实参字符数组( (字符串字符串) )的的部分部分提提供给形参数组供给形参数组共享共享。字符串存储时,系统会自动添加字符串字符串存储时,系统会自动添加字符串结束符结束符00,程序处理字符串时,程序处理字符串时, ,只只需指出需指出开始位置开始位置。7.2.2 7.2.2 字符串的复制字符串的复制 例例7-87-8 编程将源字符串从指定位置拷贝到目标字符串编程将源字符串从指定位置拷贝到目标字符串编程将源字符串从指定位置拷贝到目标字符串编程将源字符串从指定位置拷贝

36、到目标字符串 #include #include #include #include #include #include #include #include void main() void main() void main() void main() char s180,s280; char s180,s280; char s180,s280; char s180,s280; int pos; int pos; int pos; int pos; printf(Input the string s1:); printf(Input the string s1:); printf(Input

37、the string s1:); printf(Input the string s1:); gets(s1); gets(s1); gets(s1); gets(s1); printf(Input the pos: ); printf(Input the pos: ); printf(Input the pos: ); printf(Input the pos: ); scanf(%d,&pos); scanf(%d,&pos); scanf(%d,&pos); scanf(%d,&pos); strcpy(s2,&s1pos); / strcpy(s2,&s1pos); / strcpy(

38、s2,&s1pos); / strcpy(s2,&s1pos); /strcpy(s2,s1+pos);strcpy(s2,s1+pos);strcpy(s2,s1+pos);strcpy(s2,s1+pos); puts(s2); puts(s2); puts(s2); puts(s2); 7.2.2 7.2.2 字符串的复制字符串的复制 a b c d e 0 s1s1s2s22 22 2S1+2 S1+2 (&s12)(&s12)c d e 0c d e 07.2.2 7.2.2 字符串的复制字符串的复制 void main()void main()void main()void mai

39、n() char s100;char s100;char s100;char s100;int start,len,length;int start,len,length;int start,len,length;int start,len,length;gets(s);gets(s);gets(s);gets(s);scanf(%d,&start);scanf(%d,&start);scanf(%d,&start);scanf(%d,&start); scanf(%d,&length); scanf(%d,&length); scanf(%d,&length); scanf(%d,&leng

40、th);len=strlen(&sstart);len=strlen(&sstart);len=strlen(&sstart);len=strlen(&sstart);if(lenlength)if(lenlength)if(lenlength)if(len=0;i-);i=0;i-);i=0;i-);i=0;i-)if(si=c)if(si=c)if(si=c)if(si=c)return i;return i;return i;return i;return -1;return -1;return -1;return -1; 例例例例7-167-167-167-16 编制函数实现功能:在字

41、符串中编制函数实现功能:在字符串中编制函数实现功能:在字符串中编制函数实现功能:在字符串中反向反向反向反向查查查查找指定的字符,并用主函数测试。找指定的字符,并用主函数测试。找指定的字符,并用主函数测试。找指定的字符,并用主函数测试。字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数n n字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计n n字符串的复制字符串的复制字符串的复制字符串的复制n n字符串的连接字符串的连接字符串的连接字符串的连接n n字符串中字符的查找字符串中字符的查找字符串中字符的查找字符串中字符的查找n n字符串中字符的插

42、入和删除字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除n n字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找n n字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除n n字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组7.2.5 7.2.5 字符串中字符的插入和删除字符串中字符的插入和删除n n在字符串指定位置插入字符在字符串指定位置插入字符 首先在字符串中查找指定字符位置,然后将首先在字符串中查找指定字符位置,然后将指定位置后的所有字符依次指

43、定位置后的所有字符依次向后移动向后移动一个字一个字符位置以空出插入字符所需的空间;最后将符位置以空出插入字符所需的空间;最后将该字符插入到指定位置。该字符插入到指定位置。n n字符的插入方式字符的插入方式n n前插:插入字符在指定位置原字符之前前插:插入字符在指定位置原字符之前n n后插:插入字符在指定位置原字符之后后插:插入字符在指定位置原字符之后 例例例例7-177-177-177-17 编制函数实现功能:在字符串指定字符之前插编制函数实现功能:在字符串指定字符之前插编制函数实现功能:在字符串指定字符之前插编制函数实现功能:在字符串指定字符之前插入另一个字符,若在字符串中找不到插入位置,则

44、将入另一个字符,若在字符串中找不到插入位置,则将入另一个字符,若在字符串中找不到插入位置,则将入另一个字符,若在字符串中找不到插入位置,则将被插入字符添加到字符串末尾,并用主函数测试。被插入字符添加到字符串末尾,并用主函数测试。被插入字符添加到字符串末尾,并用主函数测试。被插入字符添加到字符串末尾,并用主函数测试。7.2.5 7.2.5 字符串中字符的插入和删除字符串中字符的插入和删除void insertchr(char s,char pos,char void insertchr(char s,char pos,char void insertchr(char s,char pos,cha

45、r void insertchr(char s,char pos,char c)c)c)c) int last=strlen(s);int last=strlen(s);int last=strlen(s);int last=strlen(s);char *p;char *p;char *p;char *p;p=strchr(s,pos);p=strchr(s,pos);p=strchr(s,pos);p=strchr(s,pos);if(p!=NULL)if(p!=NULL)if(p!=NULL)if(p!=NULL) for(;&slast=p;last-) for(;&slast=p;l

46、ast-) for(;&slast=p;last-) for(;&slast=p;last-) slast+1=slast; slast+1=slast; slast+1=slast; slast+1=slast; *p=c; *p=c; *p=c; *p=c; elseelseelseelse slast+1=slast; slast+1=slast; slast+1=slast; slast+1=slast; slast=c; slast=c; slast=c; slast=c; T h s i s 0 s ss si ip p6 6&s6&s6 s i s 0 i in n在字符串中删除

47、指定的字符在字符串中删除指定的字符基本思想:基本思想:首先在字符串中查找指定字符的首先在字符串中查找指定字符的位置,若找到则将字符串中自该位置以后所位置,若找到则将字符串中自该位置以后所有字符依次有字符依次向前移动向前移动一个字符位置即可。一个字符位置即可。 例例7-187-18 请编制函数,并用相应主函数测试请编制函数,并用相应主函数测试函数原型:函数原型:void deletechr(char s, char void deletechr(char s, char void deletechr(char s, char void deletechr(char s, char c);c);c

48、);c);其功能是在字符串中删除指定字符,若指其功能是在字符串中删除指定字符,若指定字符不存在则显示相应提示信息。定字符不存在则显示相应提示信息。7.2.5 7.2.5 字符串中字符的插入和删除字符串中字符的插入和删除使用标准函数在串中删去某个字符的方法:使用标准函数在串中删去某个字符的方法:使用标准函数在串中删去某个字符的方法:使用标准函数在串中删去某个字符的方法:将被删除字符后的字符串拷贝到该字符位置。将被删除字符后的字符串拷贝到该字符位置。将被删除字符后的字符串拷贝到该字符位置。将被删除字符后的字符串拷贝到该字符位置。void deletechr(char s,char c)void d

49、eletechr(char s,char c)void deletechr(char s,char c)void deletechr(char s,char c) char *p;char *p;char *p;char *p;p=strchr(s,c);p=strchr(s,c);p=strchr(s,c);p=strchr(s,c); if(p!=NULL) if(p!=NULL) if(p!=NULL) if(p!=NULL)strcpy(p,p+1); strcpy(p,p+1); strcpy(p,p+1); strcpy(p,p+1); elseelseelseelseprintf

50、(%cprintf(%cprintf(%cprintf(%c不在不在不在不在%s%s%s%s中中中中.n,c,s);.n,c,s);.n,c,s);.n,c,s); 7.2.5 7.2.5 字符串中字符的插入和删除字符串中字符的插入和删除s sa b c d e f 0 C CP P P+1P+1 d e f 0d e f 0 字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数n n字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计n n字符串的复制字符串的复制字符串的复制字符串的复制n n字符串的连接字符串的连接字符串的连接字符串的连接n

51、n字符串中字符的查找字符串中字符的查找字符串中字符的查找字符串中字符的查找n n字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除n n字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找n n字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除n n字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组7.2.6 7.2.6 字符串的比较和子串的查找字符串的比较和子串的查找 n n标准字符串比较函数标准字符串比较函数strcmpstr

52、cmp函数原型函数原型函数原型函数原型int strcmp( const char *string1, const char *string2 );int strcmp( const char *string1, const char *string2 );int strcmp( const char *string1, const char *string2 );int strcmp( const char *string1, const char *string2 );函数调用:函数调用:函数调用:函数调用:strcmp(s1,s2);strcmp(s1,s2);strcmp(s1,s2)

53、;strcmp(s1,s2); 函数功能:函数功能:函数功能:函数功能:按按按按ASCIIASCIIASCIIASCII码值的大小对两个字符串从码值的大小对两个字符串从码值的大小对两个字符串从码值的大小对两个字符串从左左到右逐个字符依次比较,直到出现不同字符或遇到到右逐个字符依次比较,直到出现不同字符或遇到到右逐个字符依次比较,直到出现不同字符或遇到到右逐个字符依次比较,直到出现不同字符或遇到字符结束符字符结束符字符结束符字符结束符 0000 为止。为止。为止。为止。比较结果的判断规则如下:比较结果的判断规则如下: 例例例例7-197-197-197-19 编制字符串比较函数编制字符串比较函数

54、编制字符串比较函数编制字符串比较函数strcomparestrcomparestrcomparestrcompare,并用,并用,并用,并用主函数测试。主函数测试。主函数测试。主函数测试。7.2.6 7.2.6 字符串的比较和子串的查找字符串的比较和子串的查找 字符数组方式实现两个字符串比较字符数组方式实现两个字符串比较int strcompare(char s, char t)int strcompare(char s, char t) int i;int i;for(i=0;for(i=0;si=tisi=ti;i+);i+)if(si=0)if(si=0)return 0;return

55、0;return si-ti;return si-ti; abcd0abcd0s sabkd0abkd0t t-67.2.6 7.2.6 字符串的比较和子串的查找字符串的比较和子串的查找 指针方式实现两个字符串比较指针方式实现两个字符串比较指针方式实现两个字符串比较指针方式实现两个字符串比较int strcompare(char *s, char *t)int strcompare(char *s, char *t)int strcompare(char *s, char *t)int strcompare(char *s, char *t) while(*s=*t) while(*s=*t)

56、 while(*s=*t) while(*s=*t) if(*s=0)if(*s=0)if(*s=0)if(*s=0) return 0; return 0; return 0; return 0; s+,t+; s+,t+; s+,t+; s+,t+; return *s-*t;return *s-*t;return *s-*t;return *s-*t; 注意:注意:字符串字符串字符串字符串本质上本质上本质上本质上是是是是字符数组字符数组字符数组字符数组,不能整体进不能整体进不能整体进不能整体进行操作,故行操作,故行操作,故行操作,故if(s1s2)if(s1s2)if(s1s2)if(s

57、1s2)是非是非是非是非法的,但可以法的,但可以法的,但可以法的,但可以使用标准的使用标准的使用标准的使用标准的strcmpstrcmpstrcmpstrcmp函数进函数进函数进函数进行整体比较。行整体比较。行整体比较。行整体比较。例例例例7-207-207-207-20 使用标准使用标准使用标准使用标准strcmpstrcmpstrcmpstrcmp函数比较两个字符串函数比较两个字符串函数比较两个字符串函数比较两个字符串n n比较字符串前比较字符串前n n个字符的标准函数个字符的标准函数strncmpstrncmp 函数原型:函数原型:int strncmp(char *string1,ch

58、ar *string2, size_t count);int strncmp(char *string1,char *string2, size_t count); 函数调用:函数调用:strncmp(str1,str2,n) strncmp(str1,str2,n) 函数功能:函数功能:比较比较str1str1和和str2str2两个字符串的前两个字符串的前n n个字符是否相等,如果相等则返回个字符是否相等,如果相等则返回0 0,否则,否则返回非返回非0 0。7.2.6 7.2.6 字符串的比较和子串的查找字符串的比较和子串的查找 例例7-227-22 使用标准使用标准strncmpstrn

59、cmp函数比较函数比较两个字符串前两个字符串前n n个字符个字符 例例例例7-217-217-217-21 编制函数编制函数编制函数编制函数strncomparestrncomparestrncomparestrncompare,并用主函数测试。,并用主函数测试。,并用主函数测试。,并用主函数测试。int strncompare(char s,char t,int n)int strncompare(char s,char t,int n) int i;int i;for(i=0;si=ti;i+)for(i=0;si=ti;i+)if(si=0|-n=0)if(si=0|-n=j;i-) f

60、or(;i=j;i-) for(;i=j;i-) for(;i=j;i-) si+len=si; si+len=si; si+len=si; si+len=si; i+;i+;i+;i+; for(j=0;tj!=0;j+,i+) for(j=0;tj!=0;j+,i+) for(j=0;tj!=0;j+,i+) for(j=0;tj!=0;j+,i+) si=tj; si=tj; si=tj; si=tj; else else else elseprintf(printf(printf(printf(字符字符字符字符%c %c %c %c 不在字符串不在字符串不在字符串不在字符串%s%s%s

61、%s中中中中.n,t0,s);.n,t0,s);.n,t0,s);.n,t0,s);s sa b c d e f g 0 c 1 2 3 0 t t c d e f g 0 4 4j=2j=2i=7i=7 c 1 2 3 i=2i=2尾尾尾尾插入点插入点插入点插入点7.2.7 7.2.7 字符串中子串的插入和删除字符串中子串的插入和删除void insertsubstr(char *s,char *t)void insertsubstr(char *s,char *t)void insertsubstr(char *s,char *t)void insertsubstr(char *s,cha

62、r *t) char *p1; char *p1; char *p1; char *p1; p1=strchr(s,*t); p1=strchr(s,*t); p1=strchr(s,*t); p1=strchr(s,*t); if(p1!=NULL) if(p1!=NULL) if(p1!=NULL) if(p1!=NULL) strcat(t,p1strcat(t,p1strcat(t,p1strcat(t,p1); ); ); ); strcpy(p1,t); strcpy(p1,t); strcpy(p1,t); strcpy(p1,t); else else else elsepri

63、ntf(printf(printf(printf(字符字符字符字符%c%c%c%c不在字符串不在字符串不在字符串不在字符串%s%s%s%s中中中中.,t0,s);.,t0,s);.,t0,s);.,t0,s); 例例例例7-267-267-267-26 改写例改写例改写例改写例7.257.257.257.25程序,充分利用程序,充分利用程序,充分利用程序,充分利用标准函数标准函数标准函数标准函数编程实编程实编程实编程实现子串插入函数现子串插入函数现子串插入函数现子串插入函数insertsubstrinsertsubstrinsertsubstrinsertsubstr。s sa b c d e

64、 f g 0 c 1 2 3 0 t tp1p1 c d e f g 0 c 1 2 3 c d e f g 07.2.7 7.2.7 字符串中子串的插入和删除字符串中子串的插入和删除n n字符串中子串的删除字符串中子串的删除 基本思想:基本思想:首先在主串中找到欲删除子串的首先在主串中找到欲删除子串的首字符位置,然后向前移动被删除子串之后首字符位置,然后向前移动被删除子串之后的所有字符。的所有字符。 例例7-277-27 函数原型为:函数原型为: void delsubstr(char s, char t);void delsubstr(char s, char t);void delsub

65、str(char s, char t);void delsubstr(char s, char t); 其功能是在一个主串中查找子串,找到则将其功能是在一个主串中查找子串,找到则将子串从主串中删除;若子串不存在则给出提子串从主串中删除;若子串不存在则给出提示信息。示信息。 7.2.7 7.2.7 字符串中子串的插入和删除字符串中子串的插入和删除void delsubstr(char s,char t)void delsubstr(char s,char t)void delsubstr(char s,char t)void delsubstr(char s,char t) int findsu

66、bstr(char s, char t);int findsubstr(char s, char t);int findsubstr(char s, char t);int findsubstr(char s, char t);int pos,len;int pos,len;int pos,len;int pos,len;pos=findsubstr(s,t);pos=findsubstr(s,t);pos=findsubstr(s,t);pos=findsubstr(s,t);if(pos!=-1)if(pos!=-1)if(pos!=-1)if(pos!=-1) len=strlen(t)

67、; len=strlen(t); len=strlen(t); len=strlen(t); for(;(spos=spos+len)!=0;pos+);for(;(spos=spos+len)!=0;pos+);for(;(spos=spos+len)!=0;pos+);for(;(spos=spos+len)!=0;pos+); elseelseelseelse printf( printf( printf( printf(串串串串%s%s%s%s不在串不在串不在串不在串%s%s%s%s中中中中.n,t,s);.n,t,s);.n,t,s);.n,t,s); s sa b c d e f

68、g 0 c d e 0 t t取子串取子串取子串取子串t t t t的长度的长度的长度的长度将将将将s s s s串中被删子串后的所有字串中被删子串后的所有字串中被删子串后的所有字串中被删子串后的所有字符向前移动符向前移动符向前移动符向前移动t t t t串的长度距离。串的长度距离。串的长度距离。串的长度距离。3 32 2POSPOSPOS+3POS+32+32+3LenLen主串中查找子串主串中查找子串主串中查找子串主串中查找子串 f g 0 7.2.7 7.2.7 字符串中子串的插入和删除字符串中子串的插入和删除例例例例7-28 7-28 7-28 7-28 重写例重写例重写例重写例7.2

69、77.277.277.27程序,充分利用程序,充分利用程序,充分利用程序,充分利用标准函数标准函数标准函数标准函数编程编程编程编程实现子串删除函数。实现子串删除函数。实现子串删除函数。实现子串删除函数。void delsubstr(char s, char t)void delsubstr(char s, char t)void delsubstr(char s, char t)void delsubstr(char s, char t) int findsubstr(char s, char t);int findsubstr(char s, char t);int findsubstr(c

70、har s, char t);int findsubstr(char s, char t);int pos;int pos;int pos;int pos;pos=findsubstr(s,t);pos=findsubstr(s,t);pos=findsubstr(s,t);pos=findsubstr(s,t);if(pos!=-1)if(pos!=-1)if(pos!=-1)if(pos!=-1) strcpy(&spos,&spos+strlen(t);strcpy(&spos,&spos+strlen(t);strcpy(&spos,&spos+strlen(t);strcpy(&sp

71、os,&spos+strlen(t);elseelseelseelse printf( printf( printf( printf(串串串串%s%s%s%s不在字符串不在字符串不在字符串不在字符串%s%s%s%s中中中中.n,t,s);.n,t,s);.n,t,s);.n,t,s); 字符串的常用处理方法及标准库函数字符串的常用处理方法及标准库函数n n字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计字符串中有效字符的统计n n字符串的复制字符串的复制字符串的复制字符串的复制n n字符串的连接字符串的连接字符串的连接字符串的连接n n字符串中字符的查找字符串中字符的查找字符

72、串中字符的查找字符串中字符的查找n n字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除字符串中字符的插入和删除n n字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找字符串的比较和子串的查找n n字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除字符串中子串的插入和删除n n字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组字符串与二维字符数组7.2.8 7.2.8 字符串与二维字符数组字符串与二维字符数组n使用二维字符数组组织多个字符串使用二维字符数组组织多个字符串 n n二维字符数组的定义二维字符数组的定义二维字

73、符数组的定义二维字符数组的定义char char char char 数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式1111常量表达式常量表达式常量表达式常量表达式2;2;2;2;其中:其中:其中:其中: 常量表达式常量表达式常量表达式常量表达式1 1 1 1:表示行数(即字符串的个数)表示行数(即字符串的个数)表示行数(即字符串的个数)表示行数(即字符串的个数) 常量表达式常量表达式常量表达式常量表达式2 2 2 2:表示最长字符串所需要的存储长度表示最长字符串所需要的存储长度表示最长字符串所需要的存储长度表示最长字符串所需要的存储长度n n二维字符数组的初始化二维字符数

74、组的初始化二维字符数组的初始化二维字符数组的初始化 例如有二维数组定义,数据存储如图例如有二维数组定义,数据存储如图例如有二维数组定义,数据存储如图例如有二维数组定义,数据存储如图7.47.47.47.4所示:所示:所示:所示: Char a510=Char a510=Char a510=Char a510= C+,English,Computer,Physics,Maths.;C+,English,Computer,Physics,Maths.;C+,English,Computer,Physics,Maths.;C+,English,Computer,Physics,Maths.;7.2.

75、8 7.2.8 字符串与二维字符数组字符串与二维字符数组例例例例7-297-297-297-29 将若干个从键盘输入的字符串按升序排列并输出将若干个从键盘输入的字符串按升序排列并输出将若干个从键盘输入的字符串按升序排列并输出将若干个从键盘输入的字符串按升序排列并输出7.2.8 7.2.8 字符串与二维字符数组字符串与二维字符数组n n使用字符指针数组组织多个字符串使用字符指针数组组织多个字符串 C C C C语言中常用指针数组处理多个字符串。语言中常用指针数组处理多个字符串。语言中常用指针数组处理多个字符串。语言中常用指针数组处理多个字符串。n n字符指针数组的定义字符指针数组的定义字符指针数

76、组的定义字符指针数组的定义 char *char *char *char *数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 n n字符指针数组的初始化字符指针数组的初始化字符指针数组的初始化字符指针数组的初始化 字符串数据字符串数据字符串数据字符串数据( ( ( (或字符数组或字符数组或字符数组或字符数组) ) ) )的的的的首地址首地址首地址首地址为初始化值。为初始化值。为初始化值。为初始化值。 如:如:如:如:char *p=C+,ENGLISH,COMPUTER;char *p=C+,ENGLISH,COMPUTER;char *p=C+,ENGLISH,COMPUT

77、ER;char *p=C+,ENGLISH,COMPUTER; 表示定义了表示定义了表示定义了表示定义了3 3 3 3个元素的字符指针数组,其数组元素个元素的字符指针数组,其数组元素个元素的字符指针数组,其数组元素个元素的字符指针数组,其数组元素是字符指针变量,分别指向对应的字符串。是字符指针变量,分别指向对应的字符串。是字符指针变量,分别指向对应的字符串。是字符指针变量,分别指向对应的字符串。7.2.8 7.2.8 字符串与二维字符数组字符串与二维字符数组 p p图图图图7.5 7.5 7.5 7.5 用字符指针数组组织字符串用字符指针数组组织字符串用字符指针数组组织字符串用字符指针数组组织

78、字符串C+0ENGLISHENGLISH 0COMPUTER0COMPUTER0P0P1P27.2.8 7.2.8 字符串与二维字符数组字符串与二维字符数组n n使用字符指针数组组织字符串注意事项使用字符指针数组组织字符串注意事项 定义字符指针数组后,在没有对这些指针变量赋予定义字符指针数组后,在没有对这些指针变量赋予定义字符指针数组后,在没有对这些指针变量赋予定义字符指针数组后,在没有对这些指针变量赋予地址值之前,它们都是空指针。地址值之前,它们都是空指针。地址值之前,它们都是空指针。地址值之前,它们都是空指针。 char *p10;char *p10;char *p10;char *p10

79、; p0=are; / p0=are; / p0=are; / p0=are; /正确赋值正确赋值正确赋值正确赋值,使,使,使,使p0p0p0p0指向串指向串指向串指向串areareareare p2=NULL; / p2=NULL; / p2=NULL; / p2=NULL; /正确赋值正确赋值正确赋值正确赋值,使,使,使,使p2p2p2p2的值为空的值为空的值为空的值为空 gets(p1); /gets(p1); /gets(p1); /gets(p1); /错误输入错误输入错误输入错误输入,p1p1p1p1是空指针是空指针是空指针是空指针 scanf(scanf(scanf(scanf(“ “%s%s%s%s” ”,p5); /,p5); /,p5); /,p5); /错误输入错误输入错误输入错误输入,p5p5p5p5是空指针是空指针是空指针是空指针 例例例例7-307-307-307-30 重写例重写例重写例重写例7.297.297.297.29程序,要求使用字符指针数组程序,要求使用字符指针数组程序,要求使用字符指针数组程序,要求使用字符指针数组组织多个字符串数据。组织多个字符串数据。组织多个字符串数据。组织多个字符串数据。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号