数据结构C语言串的基本操作

上传人:沈*** 文档编号:142120225 上传时间:2022-08-24 格式:DOC 页数:13 大小:166.50KB
收藏 版权申诉 举报 下载
数据结构C语言串的基本操作_第1页
第1页 / 共13页
数据结构C语言串的基本操作_第2页
第2页 / 共13页
数据结构C语言串的基本操作_第3页
第3页 / 共13页
资源描述:

《数据结构C语言串的基本操作》由会员分享,可在线阅读,更多相关《数据结构C语言串的基本操作(13页珍藏版)》请在装配图网上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 串的基本操作#include#include#include#define m 100typedef structchar chm;int length;Hstr;void main()Hstr *l,*p,*r;char c,w;int h,j,k;int i=0;l=(Hstr *)malloc(sizeof(Hstr);p=(Hstr *)malloc(sizeof(Hstr);r=(Hstr *)malloc(sizeof(Hstr);l-length=0; p-length=0;r-length=0;printf(请选择相关操作(数字1

2、5控制,输入0结束)n);printf(-1.建立串-n);printf(-2.显示串长度-n);printf(-3.生成与原来相同的串-n);printf(-4.串比较-n);printf(-5.串连接-n);printf(-6.返回值-n);scanf(%c,&w);getchar();while(w)switch(w)case 1:printf(请输入字符(#结束):n);scanf(%c,&c);while(c!=#) l-length+;l-chi=c;i+;scanf(%c,&c);printf(串中字符为n);for(i=0;ilength;i+)printf(%c,l-chi)

3、; printf(n);break;case 2: printf(串长度为%dn,l-length);break;case 3: for(i=0;ilength;i+) p-chi=l-chi; p-length=l-length; printf(复制的串中字符为n);for(i=0;ilength;i+)printf(%c,p-chi); printf(n); break;case 4:i=0;printf(请输入要与原串比较的字符串(#结束):n);scanf(%c,&c);while(c!=#) r-length+;r-chi=c;i+;scanf(%c,&c);printf(第二个串中

4、字符为n);for(i=0;ilength;i+)printf(%c,r-chi); printf(n); for(i=0;ilength&ilength;i+)if(l-chi!=r-chi)if(l-chi-r-chi)chi-r-chi)0)printf(第一个串大); printf(n);break;if(i=r-length|i=l-length)printf(两个串一样大n); break;case5:i=0;printf(请输入要与原串连接的串(#结束)n); scanf(%c,&c);while(c!=#)r-length+;r-chi=c;i+;scanf(%c,&c);pr

5、intf(第二个串中字符为n);for(i=0;ilength;i+)printf(%c,r-chi); printf(n);for(i=0,j=0;ilength;i+,j+)l-chl-length+i=r-chj;l-length=l-length+r-length;printf(连接后第一个串中字符为n);for(i=0;ilength;i+)printf(%c,l-chi); printf(n);break;case 6:i=0;printf(请输入要找串的起始位置(第几个字符?)n); scanf(%d,&h); printf(请输入要找的字符个数n); scanf(%d,&k);

6、 printf(内容为:n); for(i=0;ichh-1); h+; printf(n); break;getchar();printf(请选择相关操作(数字16控制,输入0结束)n);printf(-1.建立串-n);printf(-2.显示串长度-n);printf(-3.生成与原来相同的串-n);printf(-4.串比较-n);printf(-5.串连接-n);printf(-6.返回值-n); scanf(%c,&w);getchar();模式匹配#include#include#include#define bool int#define true 1#define false

7、 0typedef structchar *ch;int length;HString;bool assign(HString *t,char *chs)int i=0;char *c=chs,*d=chs;while(ci)/c不为空时进入循环i+;/计算字符串常量chs的长度if(!i)t-ch=NULL;t-length=0;elset-ch=(char*)malloc(i*sizeof(char);c=t-ch;if(!t-ch)/如果没有申请到空间return -1;while(*chs)/chs不为空时进入循环*c+=*chs+;t-length=i;return true;boo

8、l insert(HString *s,int pos,HString *t)if(poss-length)return false;if(t-length)/t非空int i=0;if(!(s-ch=(char*)realloc(s-ch,(s-length+t-length)*sizeof(char)exit(-1);for(i=s-length-1;i=pos;i-)s-chi+t-length=s-chi;for(i=0;ilength;i+)s-chpos+i=t-chi;s-length+=t-length;return true;int strLength(HString *s)

9、return s-length;int strCompare(HString *s,HString *t)int i;for(i=0;ilength&ilength;i+)if(s-chi!=t-chi)return s-chi - t-chi;return s-length - t-length;bool subString(HString *sub,HString *s,int pos,int len)if(pos=s-length|len s-length)return false;if(sub-ch)free(sub-ch);if(!len)sub-ch=NULL;sub-length

10、=0;elseint i=0;sub-ch=(char*)malloc(len*sizeof(char);for(;ichi=s-chpos+i;sub-length=len;return true;void printStr(HString *t)int i=0;while(i+length)putchar(t-chi-1);/printf(第%d个:%cn,i-1,t-chi-1);putchar(n);int indexBF(HString *s,HString *t,int pos)int i=pos,j=0;if(pos0) return -1;while(i length & j

11、length)if(s-chi=t-chj)i+;j+;elsei=i-j+1;j=0;if(j=t-length)return i-t-length;return -1;int findNext(HString *p,int *next)int i=0,j=-1;next0=-1;while(ilength)while(j=-1|i length & p-chi=p-chj)i+;j+;if(p-chi!=p-chj)nexti=j;elsenexti=nextj;j=nextj;return -1;void findNextString(char *p,int *next)int len=

12、strlen(p);int i=0,j=-1;next0=-1;while(ilength;char *c=p-ch;int i=0,j=-1;next0=-1;while(ilength)if(j=-1|ci=cj)i+,j+;if(ci!=cj)nexti=j;elsenexti=nextj;elsej=nextj;int kmpString(char *t,char *p,int pos)int i=pos,j=0,plen=strlen(p),tlen=strlen(t);int *next=(int*)malloc(plen*sizeof(int);findNextString(p,

13、next);while(itlen & jlength*sizeof(int);int i=pos,j=0;findNext2(p,next);while(ilength&jlength)if(j=-1|p-chj=t-chi)i+,j+;elsej=nextj;if(j=p-length)return i-j;return -1;int kmp(HString *t,HString *p,int pos)int *next=(int*)malloc(p-length*sizeof(int);int i=pos,j=0;findNext(p,next);while(ilength-p-length)while(j=-1|jlength & p-chj=t-chi)i+;j+;if(j=p-length)return i-p-length;j=nextj;return -1;int main()HString s1,s2;char a100,b100;int pos;puts(输入主串);gets(a);puts(输入模式串);gets(b);assign(&s1,a);assign(&s2,b);puts(输入匹配起始下标);scanf(%d,&pos);printf(%dn,kmp2(&s1,&s2,pos);system(pause);return 0;13 / 13

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!