《字符串处理》PPT课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《《字符串处理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《字符串处理》PPT课件.ppt(32页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第四章 字符串处理4.1 简单的字符串操作示例简单的字符串操作示例4.2 例题例题:统计字符数统计字符数4.3 例题例题:487-32794.4 例题例题:子串子串4.5 例题例题:最难的问题最难的问题字符串l每个字符串是一个特殊的数组,满足两个条件每个字符串是一个特殊的数组,满足两个条件元素的类型为元素的类型为char最后一个元素的值为最后一个元素的值为0,Ascii码就是码就是 0 l字串用字符型数组存储字串用字符型数组存储 char strN;从从0号元素开始存储号元素开始存储最大存储长度为最大存储长度为N-1的字符串,的字符串,N是数组大小。是数组大小。l字串字串“hello”在长度为
2、在长度为10的字符串数组中的存储格的字符串数组中的存储格式式hello 0 0 0 0 0字符串表示字符串表示l字符串常量字符串常量 “CHINA”C program!”l字符数组方式字符数组方式 char str=“abcd1234n”l指针方式指针方式 char*str=“abcd1234n”输入输入/出:单个输入出:单个输入/出字符出字符 scanf(“%c”,&stri)整体输入整体输入/出字串出字串 scanf(“%s”,str)循环条件:循环条件:stri!=0 istrlen(str)字符串处理函数l字符串输入:字符串输入:scanf、gets l字符串输出:字符串输出:prin
3、tf、putsl将格式化数据写入字符串:将格式化数据写入字符串:sprintfl字符串长度查询函数:字符串长度查询函数:strlenl字符串复制函数:字符串复制函数:strcpy、strncpy(部分拷贝)部分拷贝)l字符串连接函数:字符串连接函数:strcatl字符串比较函数:字符串比较函数:strcmp、strncmp、stricmp(区分大小区分大小写写)、strnicmpl字符串搜索函数:字符串搜索函数:strcspn、strspn、strstr、strtok、strchrl字符串大小写转换函数:字符串大小写转换函数:strlwr、strupr【算法分析】【算法分析】删除字符串中的字符
4、用覆盖算法。方法是将后面的字符覆盖删除字符串中的字符用覆盖算法。方法是将后面的字符覆盖要删除的字符。具体做法:对字符数组设定两个指针变量要删除的字符。具体做法:对字符数组设定两个指针变量(两个两个下标下标),一个,一个(p)(p)用于访问所有的元素,另一个用于访问所有的元素,另一个(q)(q)用于复制不删用于复制不删除的元素,最后赋除的元素,最后赋00值作为新字符串结束标志。在表达式值作为新字符串结束标志。在表达式*q+*q+中,中,q q先结合先结合+运算符,取地址值结合运算符,取地址值结合*后后q q自增。自增。注意对注意对*q*q赋值是有条件的,这就实现删除全部赋值是有条件的,这就实现删
5、除全部chch字符。删除字符。删除chch字符后,要添加结束标志。字符后,要添加结束标志。由于由于p p、q q都已移动,要用首地址都已移动,要用首地址strstr输出。输出。例例 在指定字符串中删除指定的字符在指定字符串中删除指定的字符#include void main()char str80,*p,*q,ch;printf(Input a string:n);gets(str);printf(Input a character you want delete:n);ch=getchar();p=q=str;p=q=str;for(;*p!=0;p+)for(;*p!=0;p+)if(*p
6、!=ch)*q+=*p;if(*p!=ch)*q+=*p;*q=0;*q=0;puts(str);int i=j=0;for(;stri!=0;i+)if(stri!=c)strj+=stri;strj=0;4.2 统计字符个数统计字符个数例:判断一个由例:判断一个由a-z组成的字符串中哪个字符出现的次组成的字符串中哪个字符出现的次数最多数最多输入:第输入:第1行是测试数据的组数行是测试数据的组数n,每组测试数据是一,每组测试数据是一个由个由a-z这这26个字符组成的字符串,每组测试数据占个字符组成的字符串,每组测试数据占一行,每行数据不超过一行,每行数据不超过1000个字符且非空。个字符且非
7、空。输出:输出:n行,每行输出对应一个输入。每一行输出包括行,每行输出对应一个输入。每一行输出包括出现次数最多的字符和该字符出现的次数,中间是一出现次数最多的字符和该字符出现的次数,中间是一个空格。如果有多个字符出现的次数相同且最多,那个空格。如果有多个字符出现的次数相同且最多,那么输出么输出ASCII码最小的那一个字符。码最小的那一个字符。统计字符个数统计字符个数读入字符串存入数组,依次判断并统计各个字母在字符串中出现读入字符串存入数组,依次判断并统计各个字母在字符串中出现的次数并找到出现次数最多的。注意三点:的次数并找到出现次数最多的。注意三点:(1)一次输入一个字符串。一次输入一个字符串
8、。scanf函数通过空格或者回车结束。函数通过空格或者回车结束。(2)通过字符型数组的下标访问各个元素。使用函数通过字符型数组的下标访问各个元素。使用函数strlen计算字计算字符个数。符个数。(3)输入的字符串中,可能有多个字符出现次数相同且最多的情况。输入的字符串中,可能有多个字符出现次数相同且最多的情况。此时输出此时输出Ascii码最小的字符。码最小的字符。解决方案:解决方案:char str1001存放输入字符串,可存储最多存放输入字符串,可存储最多1000个字个字符,其中多一个元素存储字符串结束标志符,其中多一个元素存储字符串结束标志0。数组。数组 int sum26记录字符串中每个
9、字母的出现次数。字母记录字符串中每个字母的出现次数。字母c的出现的次的出现的次数记录在数记录在sumc-a中。中。统计字符数#include#include void main()int cases,sum26,i,max;char str1001;scanf(%d,&cases);while(cases 0)scanf(%s,str);for(i=0;i 26;i+)sumi=0;for(i=0;i strlen(str);i+)sum stri-a+;max=0;/求出现次数最多的字符的元素下标求出现次数最多的字符的元素下标for(i=1;i summax)max=i;printf(%c%
10、dn,max+a,summax);cases-;stri!=04.3 487-3279l电话号码转换成字符串电话号码转换成字符串企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语;另一个办法是以一种好记的方式对它写成一个容易记住的单词或者短语;另一个办法是以一种好记的方式对号码的数字进行分组。号码的数字进行分组。电话号码的电话号码的标准格式标准格式是七位十进制数,并在第三、第四位数字之间有一个连是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射
11、,映射关系如下:接符。电话拨号盘提供了从字母到数字的映射,映射关系如下:A,B,A,B,和和C C 映射到映射到 2 2 D,E,D,E,和和F F 映射到映射到 3 3 G,H,G,H,和和I I 映射到映射到 4 4 J,K,J,K,和和L L 映射到映射到 5 5 M,N,M,N,和和O O 映射到映射到 6 6 P,R,P,R,和和S S 映射到映射到 7 7 T,U,T,U,和和V V 映射到映射到 8 8 W,X,W,X,和和Y Y 映射到映射到 9 9 Q Q(7)(7)和和Z Z(9)(9)没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。没有映射到任何数字,连字符不需
12、要拨号,可以任意添加和删除。TUT-GLOPTUT-GLOP的标准格式是的标准格式是888-4567888-4567,310-GINO310-GINO的标准格式是的标准格式是310-4466310-4466,3-3-10-10-1010-10-10的标准格式是的标准格式是310-1010310-1010。如果两个号码有相同的标准格式,那么。如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)。某人正在为本地的公司编写一个电话号他们就是等同的(相同的拨号)。某人正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相码薄。作为质量控制的一部分,你想
13、要检查是否有两个和多个公司拥有相同的电话号码。同的电话号码。4.3 487-3279l输入:第一行指定电话薄中号码的数量(最多输入:第一行指定电话薄中号码的数量(最多100000)。余)。余下每行是一个由下每行是一个由数字,大写字母以及连接符数字,大写字母以及连接符构成的电话号码。构成的电话号码。l输出:对于每个重复号码产生一行输出,输出的是号码的标输出:对于每个重复号码产生一行输出,输出的是号码的标准格式紧跟一个空格然后是重复次数。如果存在多个重复号准格式紧跟一个空格然后是重复次数。如果存在多个重复号码按照字典升序输出。如果没有则输出码按照字典升序输出。如果没有则输出No duplicate
14、s。l问题分析:将电话号码译成单词、短语时有多种方式。为判问题分析:将电话号码译成单词、短语时有多种方式。为判断是否有重复号码,要解决两个问题。断是否有重复号码,要解决两个问题。将各种电话号码表示转换成标准表示:一个长度为将各种电话号码表示转换成标准表示:一个长度为8的字符的字符串,前三个字符是数字、第串,前三个字符是数字、第4 个字符是个字符是-、后四个字符、后四个字符是数字。是数字。对全部电话号码进行排序,相同号码排在相邻位置。对全部电话号码进行排序,相同号码排在相邻位置。4.3 487-3279l解决方案:用二维数组解决方案:用二维数组telNumbers1000009存储全部电话号存储
15、全部电话号码的标准表示。每读入一个电话号码,先转换成标准格示,码的标准表示。每读入一个电话号码,先转换成标准格示,然后存储到二维数组中。全部电话号码输入完后,用函数模然后存储到二维数组中。全部电话号码输入完后,用函数模板板qsort进行排序,用函数进行排序,用函数strcmp比较比较telNumbers中相邻号码,中相邻号码,判断是否有重复的电话号码、并计算重复次数。判断是否有重复的电话号码、并计算重复次数。l实现技巧实现技巧 用字符串用字符串map表示从电话拨号盘的字母到数字的映射关系:表示从电话拨号盘的字母到数字的映射关系:mapj表示字母表示字母j+A映射成的数字。映射成的数字。char
16、 map=22233344455566677778889999;使用使用C/C+的函数:的函数:qsort排序;排序;strcmp比较。比较。对程序进行模块化和使用全局变量,号码标准化用函数对程序进行模块化和使用全局变量,号码标准化用函数standardizeTel,数组,数组map和和telNumbers作为全局变量。作为全局变量。#include#include#include char map=22233344455566677778889999;char str80,telNumbers1000009;int compare(const void*elem1,const void*el
17、em2)return(strcmp(char*)elem1,(char*)elem2);void standardizeTel(int n)int j,k;j=k=-1;while(k=A&strj=Z)telNumbersnk=mapstrj-A;continue;telNumbersnk=strj;/是数字字符是数字字符 telNumbersnk=0;void main()int n,i,j;bool noduplicate;scanf(%d,&n);for(i=0;in;i+)/输入电话号码输入电话号码 scanf(%s,str);standardizeTel(i);qsort(telN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串处理 字符串 处理 PPT 课件
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内