第10章 字符串和文本处理.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第10章 字符串和文本处理.ppt》由用户(最好的沉淀)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 字符串和文本处理 10 字符串 和文 处理
- 资源描述:
-
1、第第10章章 算法和数据结构基础算法和数据结构基础字符串和文本处理字符串和文本处理哈尔滨工业大学哈尔滨工业大学10.1.1 字符串的存储与表示字符串的存储与表示用双引号括起的一串字符是用双引号括起的一串字符是字符串常字符串常量量,系统自动为其添加,系统自动为其添加空字符空字符0用用空字符空字符0(ASCII码值为码值为0)标志字符串的末尾标志字符串的末尾字符串结束标志字符串结束标志printf(How are you.n);printf(How are you.n);How are you._How are you._10.1.1 字符串的存储与表示字符串的存储与表示nC语言没有提供专门的字符
2、串数据类型语言没有提供专门的字符串数据类型n字符数组字符数组每个元素都是字符类型的数组每个元素都是字符类型的数组是字符数组,但不一定代表字符串是字符数组,但不一定代表字符串数组的最后一个元素必须是数组的最后一个元素必须是0才表示字符串才表示字符串不要混淆不要混淆0(ASCII码为码为0)与与0(ASCII码为码为48)n字符数组的定义字符数组的定义n#define STR_LEN 80nchar strSTR_LEN+1;n字符数组的初始化字符数组的初始化用字符常量的初始化列表对数组初始化用字符常量的初始化列表对数组初始化 char str6=C,h,i,n,a,0;用字符串常量直接对数组初始
3、化用字符串常量直接对数组初始化 char str6=China;char str6=China;char str =China;char str10=China;char str4=China;10.1.1 字符串的存储与表示字符串的存储与表示10.1.1 字符串的存储与表示字符串的存储与表示n用一维字符数组存储单个字符串用一维字符数组存储单个字符串char str6=H,e,l,l,o,0;char str10=H,e,l,l,o;10.1.1 字符串的存储与表示字符串的存储与表示n用二维字符数组存储多个字符串用二维字符数组存储多个字符串char weekday10=Sunday,Monda
4、y,Tuesday,Wednesday,Thursday,Friday,Saturday;10.1.1 字符串的存储与表示字符串的存储与表示pStrHello China;char*pStr=pStr是一个指向常量存储区中的字符串的指针是一个指向常量存储区中的字符串的指针变量变量char*pStr;pStr=Hello China;可修改可修改pStr的值(指向),但不可以对它所指向的的值(指向),但不可以对它所指向的存储单元进行写操作存储单元进行写操作=W;n(1)让字符指针指向一个字符串常量让字符指针指向一个字符串常量n(2)让字符指针指向一个字符数组让字符指针指向一个字符数组10.1.1
5、 字符串的存储与表示字符串的存储与表示pStrHello Chinachar str=*pStr=W;char*pStr;pStr=str;pStr=&str0;pStr的值(指向)可被修改,的值(指向)可被修改,它所指向的字符串也可被修改它所指向的字符串也可被修改str0=W;pStr0=W;#define STR_LEN 80char strSTR_LEN+1;10.1.2 字符串的输入和输出字符串的输入和输出n(1)以以%c格式,逐个字符输入格式,逐个字符输入/输出输出与使用其他类型数组不同的是,通常不使用长度即计数控制的循环来判断数组元素是否遍历结束,而使用条件控制的循环,利用字符串结
6、束标志0判断字符串中的字符是否遍历结束。scanf(%s,str);printf(%sn,str);gets(str);puts(str);不能输入带空格不能输入带空格的字符串的字符串可以输入带空格可以输入带空格的字符串的字符串#define STR_LEN 80char strSTR_LEN+1;10.1.2 字符串的输入和输出字符串的输入和输出n(2)以以%s格式,整体输入格式,整体输入/输出字符串输出字符串n(3)使用字符串处理函数使用字符串处理函数gets()和和puts()整体输入整体输入/输出字输出字符串符串10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.1】下面程
7、序用于演示函数下面程序用于演示函数gets()与与scanf()的不同。的不同。#include#define N 20int main(void)char cN+1=;printf(Input a string:n);scanf(%s,c);printf(Output a string:n);printf(%sn,c);printf(Input a string:n);gets(c);printf(Output a string:n);puts(c);return 0;10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.1】下面程序用于演示函数下面程序用于演示函数gets()与与
8、scanf()的不同。的不同。#include#define N 20int main(void)char cN+1=;printf(Input a string:n);scanf(%s,c);printf(Output a string:n);printf(%sn,c);getchar();/读走前面的读走前面的回车符回车符 printf(Input a string:n);gets(c);printf(Output a string:n);puts(c);return 0;10.1.2 字符串的输入和输出字符串的输入和输出n(3)使用字符串处理函数使用字符串处理函数fgets()和和fpu
9、ts()整体输入整体输入/输出字符串输出字符串函数函数fgets()的原型为:的原型为:char*fgets(char*buf,int n,FILE*fp);功能是从功能是从fp所指的文件中读取字符串并在字符串末尾添加所指的文件中读取字符串并在字符串末尾添加0,然后存入,然后存入s,最多读最多读n-1个字符。个字符。可以限制用户输入的字符数可以限制用户输入的字符数,更安全。,更安全。fgets()与与gets()对回车换行符的处理也是不同的,对回车换行符的处理也是不同的,fgets()从指定的流读字符串从指定的流读字符串,读到回车换行符时将回车换行符也作为字符串的一部分读到字符串中来。,读到回
10、车换行符时将回车换行符也作为字符串的一部分读到字符串中来。函数函数fputs()的原型为:的原型为:int fputs(char*buf,FILE*fp);功能是将功能是将buf指向的字符串输出到指向的字符串输出到fp所指定的文件。所指定的文件。10.1.2 字符串的输入和输出字符串的输入和输出n【例例10.2】最牛微最牛微信。信。n请你编写程序测试上请你编写程序测试上述计算结果的正确性。述计算结果的正确性。/函数功能:将字符数组函数功能:将字符数组str中的字符串转换为英文字母对应的数字,然后累加求和并返回中的字符串转换为英文字母对应的数字,然后累加求和并返回int LetterSum(ch
11、ar str)int i,sum=0;for(i=0;stri!=0;i+)if(stri=a&stri=A&stri=Z)sum+=stri-A+1;else return-1;return sum;#include int LetterSum(char str);int main(void)char a80;int sum;printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串
12、的输入和输出/函数功能:将字符数组函数功能:将字符数组str中的字符串转换为英文字母对应的数字,然后累加求和并返回中的字符串转换为英文字母对应的数字,然后累加求和并返回int LetterSum(char str)int i,sum=0;for(i=0;stri!=0;i+)if(islower(stri)sum+=stri-a+1;else if(isupper(stri)sum+=stri-A+1;else return-1;return sum;#include#include int LetterSum(char str);int main(void)char a80;int sum;
13、printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串的输入和输出/函数功能:将函数功能:将str指向的字符串转换为英文字母对应的编号数字,然后累加求和并返回指向的字符串转换为英文字母对应的编号数字,然后累加求和并返回int LetterSum(char*str)int sum=0;for(;*str!=0;str+)if(*str=a&*str=A&*str=Z)sum+=*st
14、r-A+1;else return-1;return sum;#include int LetterSum(char*str);int main(void)char a80;int sum;printf(Input a word:);gets(a);sum=LetterSum(a);if(sum!=-1)printf(%s=%d%n,a,sum);else printf(Input error!n);return 0;10.1.2 字符串的输入和输出字符串的输入和输出10.1.4字符串处理函数字符串处理函数n#include strcpy(目的字符数组目的字符数组,源字符串源字符串);stri
15、ng copystrlen(字符串字符串);string lengthstrcat(目的字符数组目的字符数组,源字符串源字符串);string combinationstrcmp(字符串字符串1,字符串字符串2);string comparisonn#include strlen(字符串字符串);char str10=China;printf(%d,strlen(str);问题:输出结果问题:输出结果是是 5,6,还是,还是10?不包括不包括0的实际字符的个数的实际字符的个数10.1.4字符串处理函数字符串处理函数len=strlen(str);for(i=0;ilen;i+)putchar(
16、stri);putchar(n);for(i=0;stri!=0;i+)putchar(stri);putchar(n);用计算得到的字符串长度用计算得到的字符串长度控制字符串输出控制字符串输出用字符串结束标志(空字符)用字符串结束标志(空字符)控制字符串输出控制字符串输出#define STR_LEN 80char strSTR_LEN+1;10.1.4字符串处理函数字符串处理函数n#include strcpy(目的字符数组目的字符数组,源字符串源字符串);问题:字符串能否用赋值运算符(问题:字符串能否用赋值运算符(=)整体复制?)整体复制?str2=str1;strcpy(str2,st
17、r1);注意复制方向!注意复制方向!str2须足够大!须足够大!strncpy(str2,str1,n);更安全!更安全!strcpy(str2,strcpy(str1,Hello);10.1.4字符串处理函数字符串处理函数n#include strcat(目的字符数组目的字符数组,源字符串源字符串);strcat(str2,str1);str2必须足够大!必须足够大!strncat(str2,str1,n);strcat(str2,strcat(str1,Hello);10.1.4字符串处理函数字符串处理函数n#include strcmp(字符串字符串1,字符串字符串2);问题:字符串能否
18、用关系运算符问题:字符串能否用关系运算符,=直接比较大小直接比较大小?if(str2=str1)if(strcmp(str2,str1)=0)if(strncmp(str2,str1,n)=0)10.1.4字符串处理函数字符串处理函数问题:字符串问题:字符串是如何比较大小的?是如何比较大小的?当出现第一对不相等的字符时,就由当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,这两个字符决定所在字符串的大小,返回其返回其ASCII码比较的结果值(差值)码比较的结果值(差值)comparecomputer判断判断str1是否小于是否小于str2?if(strcmp(str1,str2)
19、0)n#include strcmp(字符串字符串1,字符串字符串2);10.1.4字符串处理函数字符串处理函数10.1.4字符串处理函数字符串处理函数n【例例10.3】请自己编写一个字符串比较函数请自己编写一个字符串比较函数MyStrcmp(),输入一个密码,调用函数,输入一个密码,调用函数MyStrcmp()判断用户输入的密码是否正确,如果正确,则输出判断用户输入的密码是否正确,如果正确,则输出Welcome!n,如,如果不正确,则输出果不正确,则输出Sorry!n,直到用户输入正确为止。,直到用户输入正确为止。#include int MyStrcmp(const char s,cons
20、t char t);int main(void)char password8=secret,input8;while(1)printf(Enter your password:);gets(input);if(MyStrcmp(input,password)=0)printf(Welcome!n);break;else printf(Sorry!n);return 0;/函数功能:采用字符数组做函数参数实现字符串比较函数功能:采用字符数组做函数参数实现字符串比较int MyStrcmp(const char s,const char t)int i;for(i=0;si=ti;i+)if(si
21、=0)return 0;return si-ti;/函数功能:采用字符指针做函数参数实现字符串比较函数功能:采用字符指针做函数参数实现字符串比较int MyStrcmp(const char*p1,const char*p2)for(;*p1=*p2;p1+,p2+)if(*p1=0)return 0;return*p1-*p2;香港中文大学独立时代杂志,2014年“愿付雁书常思君微情书征文大赛”一等奖作品10.2 字符串的应用字符串的应用编程带你去看编程带你去看“诗和远方诗和远方”10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一
22、种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#include#define N 20void Reverse(const char str,char reverse);int main(void)char inputN+1,reverseN+1;gets(input);Reverse(input,reverse);puts(reverse
23、);return 0;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(const char str,char reverse)int i;int len=strlen(str);/计算字符串计算字符串str的长度的长度 for(i=0;stri!=0;i+)reversei=strlen-i-1;reversei=0;10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序
24、过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#include#define N 20void Reverse(char str);int main(void)char inputN+1;gets(input);Reverse(input);puts(input);return 0;/函数功能:采用字符数组做函数参数实现字符串逆序函数功能:采用字符数组做函数参数实现字符串逆序void Reverse(char str)int len,
25、i,j;char temp;len=strlen(str);for(i=0,j=len-1;ij;i+,j-)temp=stri;stri=strj;strj=temp;10.2.1 向函数传递字符串向函数传递字符串n【例例10.4】假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,假设你进入了一个科幻世界,在那里科学家们发明了一种时光穿梭机,你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在你只要能将字符串逆序过来,你就可以穿越回过去,让昨日重现、一如往昔。现在,请你编写这样一个字符串逆序程序。,请你编写这样一个字符串逆序程序。#include#includ
展开阅读全文