c语言高级程序设计(下)ppt

c语言高级程序设计(下)ppt

ID:36326080

大小:610.00 KB

页数:175页

时间:2019-05-09

c语言高级程序设计(下)ppt_第1页
c语言高级程序设计(下)ppt_第2页
c语言高级程序设计(下)ppt_第3页
c语言高级程序设计(下)ppt_第4页
c语言高级程序设计(下)ppt_第5页
资源描述:

《c语言高级程序设计(下)ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言高级程序设计(下)1第4章字符串部分2例4.1例4.1编写一个函数,找出字符串str1与str2的所有最长公共子串。3例4.1首先,判定两个串是否有长为j的子串的方法是:对串1从左至右的的每一个子串,都与串2的从左至右的每一个子串进行比较。考虑“bsdefg”与“asdefsdefsrt”的公共子串4例4.1本例是计算最长的公共子串,这里的方法是从可能的最长的子串的长度开始考虑,即从j=min(strlen(str1),strlen(str2))开始,看是否有这个长度的公共子串,如果有,则肯

2、定是最长的,否则再对j-1尝试,直至j减至0为止。5intsubstr(char*str1,char*str2,int*len){char*s1,*s2;/*分别表示长、短串*/intlen1,len2,k,j,i,l,count=0;len1=strlen(str1);len2=strlen(str2);s1=len1>len2?str1:str2;s2=len1>len2?str2:str1;len2=len1>len2?len2:len1;for(j=len2;j>0;j--){/*从最有可

3、能的长子串开始*/for(k=0;k+j<=len2;k++){for(i=0;s1[i+j-1]!='';i++){for(l=0;l0)break;}*len=(count>0)?j:0;returncount;}6例4.2例4.2采用顺序结构存储串。试编写一个实现串通配符匹配的函数

4、pindex(),其中的通配符只有‘?’,它可以和任何一字符匹配成功,例如:pindex(“?re”,”thereare”)返回的结果是2。7intpindex(char*substr,char*str){inti,j,k;for(i=0;str[i];i++)for(j=i,k=0;str[j]==substr[k]

5、

6、substr[k]=='?';j++,k++)if(!substr[k+1])returni;return-1;}8例4.3例4.3试编写一个函数intlike(charstr,

7、charpattern),该函数实现字符串匹配功能,str为被匹配的字符串,pattern是匹配模式,匹配模式有以下几种情况:(1)_(下划线)和?:表示通配1位任意字符;(2)*和%:表示通配0个、1个或多个任意字符;(3)转义符:-?*%\表示精确匹配,而不是通配;其它字符为精确匹配;通配符可以多次出现。9例4.3提示:(1)_(下划线)和?:不必比较,模式串与待比串分别向前移一位;(2)*和%:通配0个、1个或多个任意字符,此时模式串前移一位,而待比串移至与模式串相同符号的位置。

8、但有可能所移到的位置并不是真正匹配的位置,因此要保存“*”、“%”后面字符的位置,若模式串有这种通配符,也可以恢复模式串到保留的“*”、“%”位置,继续与待比串匹配;(3)转义符:-?*%\表示精确匹配,此时设标记,并将模式串前移一位;10for(j=0,k=0;;){for(;str[j]==pattern[k]

9、

10、!accurateFlag&&(pattern[k]=='?'

11、

12、pattern[k]=='_'

13、

14、pattern[k]=='*'

15、

16、pattern[k]=='%'

17、

18、p

19、attern[k]=='\');){if(str[j]==pattern[k]){j++;k++;accurateFlag=0;}else{if(pattern[k]=='\'){/*转义符处理*/k++;/*模式串前移*/accurateFlag=1;/*设标记,以使循环条件成立*/}else{if(pattern[k]=='?'

20、

21、pattern[k]=='_'){/*’?’、’_’的处理*/j++;k++;}else{/*’*’,’%’的处理*/posK=k++;/*保存’*’,’%’的

22、位置*/while(pattern[k]!=str[j]&&str[j]!='')j++;if(pattern[k]!=str[j]

23、

24、str[j]=='')break;}if(!pattern[k]&&!str[j])return1;/*成功结束*/elseif(!pattern[k])break;/*模式串结束但待比串未结束,不一定终止*/elseif(!str[j])return0;/*待比串结束但模式串不结束,不匹配*/}if(posK==-1)break;/*若无

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。