数据结构C语言串的基本操作精品资料.doc
《数据结构C语言串的基本操作精品资料.doc》由会员分享,可在线阅读,更多相关《数据结构C语言串的基本操作精品资料.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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(请选择相关操作(数字15控制,输入0结束)n);printf(-1.建
2、立串-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); printf(n);break;case 2
3、: 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(第二个串中字符为n);for(i=0;ilength;i+
4、)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);printf(第二个串中字符为n);for(i=0;
5、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); printf(内容为:n); for(i=0;
6、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 0typedef structchar *ch
7、;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;bool insert(HString *s,int
8、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)return s-length;int strC
9、ompare(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=0;elseint i=0;sub-ch=(c
10、har*)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 length)if(s-chi=t-chj)i+
11、;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=strlen(p);int i=0,j=-1;n
12、ext0=-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,next);while(itlen & jlen
13、gth*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 &
14、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;附录资料:不需要的可以自行删除C语言编译环境中的调试功能及常见错误提示调
15、试功能1常用健 : 激活系统菜单: 将光标在编辑窗口和、信息窗口之间切换: 加载一个文件+: 查看程序运行结果: 得到有关编辑器在线帮助+: 得到有关C语言的在线帮助+: 终止正在运行的程序2块操作 KB: 定义块首 KK: 定义块尾 KV: 块移动 KC: 块复制 KY: 块删除 KH: 取消块定义3查找、替换和删除操作 QF: 查找字符串 QA: 查找并替换字符串 Option: G(全程), B(向文件头), N(直接替换) Y : 删除一行 QY: 删除从光标位置到行末的所有字符编译中的常见错误例析(1)警告类错误 XXXdeclare but never used 变量XXX已定义但
16、从未用过。 XXXis assigned a value which is never used 变量XXX已赋值但从未用过。 Code has no effect 程序中含有没有实际作用的代码。 Non-portable pointer conversion 不适当的指针转换,可能是在应该使用指针的地方用了一个非0的数值。 Possible use of XXXbefore definition 表达式中使用了未赋值的变量 Redeclaration of main 一个程序文件中主函数main不止一个。 Suspicious pointer conversion 可疑的指针转换。通常是使用
17、了基本类型不匹配的指针。 Unreachable code 程序含有不能执行到的代码。(2)错误或致命错误 Compound statement missing in function main 程序结尾缺少括号。 “”expected; “(”expected等 复合语句或数组初始化的结尾缺少“)”;“(”。 Case outside of switch case 不属于Switch结构,多由于switch结构中的花括号不配对所致。 Case statement missing : switch结构中的某个case之后缺少冒号。 Constant expression required 定义
18、数组时指定的数组长度不是常量表达式。 Declaration syntax error 结构体或联合类型的定义后缺少分号。 Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。 Default outside switch Default部分放到了switch结构之外,一般是因为花括号不匹配而引起的。 do statement must have while do语句中缺少相应的while部分。 Expression syntax 表达式语法错。如表达式中含有两个连续的运算符 Extra parameter in call fun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构C语言串的基本操作 精品资料 数据结构 语言 基本 操作 精品 资料
限制150内