字符串处理中的常见问题.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
字符串处理中的常见问题

字符串处理中的常见问题 ——王炳华 在C语言中字符串处理方面的问题非常普遍,常见问题如:查找、替换、复制、移动、插入、删除、排序、连接、打印图案、单词统计、字符串类型与其他类型(整型、实型、长整型)之间的相互转换等。 由于在C语言中只有字符变量,没有字符串变量,字符串的存储是用字符数组实现的。同时由于在处理字符串时使用指针比较方便,因此在一些C语言考试中,常常把对数组和对指针方面的考查用字符串作为对象,使得这方面的考题也就比较多。 在各种C语言的编译软件中都提供了很多字符串处理函数。它们的源代码在string.h头文件中,在编程中可以尽量利用这些函数,如果使用了这些函数一定要包含string.h头文件。但是在有些考题中常常给出不得使用库函数的限制。因此在下面的例题中尽可能照顾到这个情况。 查找 查找本身是一种基本算法,同时它也常常是其他一些算法的先行步骤。C语言提供了几个用于查找的函数,如:int strcmp(char *,char *)、int strncmp(char *,char *,int)、char * strstr(char *,char *)、char * strchr(char *,char)等。 从键盘上读入一批单词,统计其中单词”good’出现的个数。代码如下: #include stdio.h #include string.h void main() { char c1[80],c2[]=good ,*p1=c1,*p2=c2; int n=0; //作记数器使用 gets(p1); //在p 1指针后移的过程中,它所指的尾子串越来越/短,若其长度=p2指针所指的串的长度就有可能还有c2串。所以用strlen(p1)=strlen(p2)作为下面查找循环执行的条件。 for(;strlen(p1)=strlen(p2);p1++) if(!strncmp(p1,p2,strlen(p2))) n++; // strncmp(p1,p2,strlen(p2))==0是找到了,n增1 printf(%d\n,n); } 如果用char * strstr(char *,char *)函数,可将代码改写如下: #include stdio.h #include string.h void main() { char c1[80],c2[]=good ,*p1=c1,*p2=c2; int n=0; gets(p1); for(;strlen(p1)=strlen(p2);p1++) if(p1=strstr(p1,p2)) n++; //(strstr(p1,p2)!==NULL是找到了,就 printf(%d\n,n); //把指针移动到找到的地方,可以大大地提高执行效率 } 这个代码比前一个代码的执行效率高。前者指针是每次移动一个字符。循环体需要执行strlen(p1)=strlen(p2)次。后者是执行一次循环就找到一个good (如果有的话),找到之后指针一下就可以移动到’g’字母后的’o’字母上,下次循环是从这里开始去找下一个good ,这样循环体就少执行了(最后一个good 前的字符个数 - good 单词的总个数)次。 如果不准使用char * strstr(char *,char *)函数,可以自己编写一个。见下面的例题和代码。 例1_2. 编写一个函数实现将在第一个串中查找第二个串,若找到就返回在第一个串中首次出现第二个串的起始地址,若找不到就返回NULL。函数的原型为char *mystrstr(str1 *, str2 *);在主函数中读入两个串,调用该函数在第一个串中查找第二个串,输出找到处开始后面的串。代码如下: #include stdio.h #include string.h void main() { char str1[80],*ps1=str1; char str2[20],*ps2=str2,*p; char *mystrstr(char *, char *); gets(str1); gets(str2); p=mystrstr(ps1,ps2); puts(p); } char *mystrstr(char *p1, char *p2) { int n; char *pp1=p1,*pc1,*pc2; n=strlen(p2); for(;strlen(pp1)=n;pp1++) if(*pp1==*p2) //当发现p2串的首字符与pp1所指的字符相同时,就在下面的循 { for(pc1=

您可能关注的文档

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档