- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言高级程序设计(下)ppt175
C语言高级程序设计(下) 第4章 字符串部分 例4.1 例4.1 编写一个函数,找出字符串str1与str2的所有最长公共子串。 例4.1 首先,判定两个串是否有长为j的子串的方法是:对串1从左至右的的每一个子串,都与串2的从左至右的每一个子串进行比较。 考虑“bsdefg”与“asdefsdefsrt”的公共子串 例4.1 本例是计算最长的公共子串,这里的方法是从可能的最长的子串的长度开始考虑,即从j=min(strlen(str1),strlen(str2))开始,看是否有这个长度的公共子串,如果有,则肯定是最长的,否则再对j-1尝试,直至j减至0为止。 int substr(char *str1,char *str2,int *len){ char *s1,*s2; /*分别表示长、短串*/ int len1,len2, k,j,i,l,count=0; len1=strlen(str1); len2=strlen(str2); s1=len1len2?str1:str2; s2=len1len2?str2:str1; len2=len1len2?len2:len1; for (j=len2;j0;j--){ /*从最有可能的长子串开始*/ for (k=0;k+j=len2;k++) { for (i=0;s1[i+j-1]!=\0;i++){ for (l=0;ljs1[i+l]==s2[k+l];l++); if (l==j){ for (l=0;lj;l++) printf(%c,s2[k+l]); printf(\n); count++; } } } if (count0) break; } *len=(count0)?j:0; return count; } 例4.2 例4.2 采用顺序结构存储串。试编写一个实现串通配符匹配的函数pindex(),其中的通配符只有‘?’,它可以和任何一字符匹配成功,例如:pindex(“?re”,”there are”)返回的结果是2。 int pindex(char *substr,char *str){ int i,j,k; for (i=0;str[i];i++) for (j=i,k=0; str[j]==substr[k]||substr[k]==?; j++,k++) if (!substr[k+1]) return i; return -1; } 例4.3 例4.3 试编写一个函数 int like(char str,char pattern), 该函数实现字符串匹配功能,str为被匹配的字符串,pattern是匹配模式,匹配模式有以下几种情况: (1)_(下划线)和?:表示通配1位任意字符; (2)*和%:表示通配0个、1个或多个任意字符; (3)转义符\:\- \? \* \% \\ 表示精确匹配,而不是通配; 其它字符为精确匹配;通配符可以多次出现。 例4.3 提示: (1)_(下划线)和?:不必比较,模式串与待比串分别向前移一位; (2)*和%:通配0个、1个或多个任意字符,此时模式串前移一位,而待比串移至与模式串相同符号的位置。但有可能所移到的位置并不是真正匹配的位置,因此要保存“*”、“%”后面字符的位置,若模式串有这种通配符,也可以恢复模式串到保留的“*”、“%”位置,继续与待比串匹配; (3)转义符\:\- \? \* \% \\ 表示精确匹配,此时设标记,并将模式串前移一位; for (j=0,k=0;;){ for (;str[j]==pattern[k]||!accurateFlag (pattern[k]==?||pattern[k]==_|| pattern[k]==*||pattern[k]==%||pattern[k]==\\);){ if (str[j]==pattern[k]){ j++; k++; accurateFlag=0; } else { if (pattern[k]==\\) { /*转义符处理*/ k++; /*模式串前移*/ accurateFlag=1; /*设标记,以使循环条件成立*/ } else{ if (pattern[k]==?||pattern[k]==_){ /*’?’、’_’的处理*/ j++; k++;
您可能关注的文档
- 石家庄市友谊大街过石太高速箱涵泵站工程施工.pdf
- 先秦儒道「感官」观念探析Exploration and Analysis ofthe Idea of.pdf
- 电影世界杯:100部载入影史的非英语电影.pdf
- 研究生学院深入开展创先争优活动实施方案.doc
- 建设工程计量与计价和招标投标pdf114.pdf
- 电子校务体系的构建探索-北京大学计算中心 种连荣.ppt
- 先进制造技术综合实训课的建设与实施.pdf
- 砌块砌体砌筑与配筋砌体的施工ppt36.ppt
- 祭孔大典之亿载金城ppt31.ppt
- 湘版高中美术教材培训ppt56.ppt
- 全国房地产市场供给情况分析.doc
- Java 2实用教程(第三版)Java多线程机制和输入输出流ppt38.ppt
- C语言程序设计一体化案例教程(上)ppt181.ppt
- Java 2实用教程(第三版)Java Applet基础、实现与图形与图像 ppt34.ppt
- Java 2实用教程(第三版)入门标识符、关键字和数据类型ppt31.ppt
- 全国教育科学“十五”规划2003年度教育部重点课题.ppt
- 全国教育科学“十五”规划教育部重点课题“基于网络应用的学生自主性探究.doc
- Java 2实用教程(第三版)类、对象和接口ppt70.ppt
- 全国教育科学"十五"规划课题指南.doc
- JavaEE基础教程 第3章 控制结构ppt41.ppt
原创力文档


文档评论(0)