数据结构顺序字符串

最后的子串在父串中寻找位置的代码写不对,求解

#include<stdio.h> #include<stdlib.h> #define maxSize 100 //串字符数组最大长度 typedef struct{ char ch[maxSize]; //顺序串的存储数组 int length; //顺序串的实际长度 }SeqString; //初始化字符串 void createSeqString(SeqString &s){ s.length=0; } //给字符串赋值 void inputSeqString(SeqString &s){ int i=0; char ch1; printf("请输入字符串s(输入#结束):\n"); while ((ch1=getchar())!='#'){ s.ch[i]=ch1; i++; } s.ch[i]='\0'; s.length=i; } //输出长度 int LengthSeqString(SeqString &s){ return s.length; } //输出字符串 void printSeqString(SeqString &s) { for(int i=0;i<s.length;i++){ printf("%c",s.ch[i]); } printf("\n"); } //复制字符串 void copySeqString(SeqString &s,SeqString &t){ int i,j;//i表示开始复制的位置,j表示复制个数 printf("请输入开始位置i:"); scanf("%d",&i); printf("请输入复制的个数j:"); scanf("%d",&j); int k=1,n,x=i-1; if(i<1||i>s.length||j<1||j>s.length) printf("错误!"); else{ for(n=0;n<j;n++,x++){ t.ch[n]=s.ch[x]; k++; } } t.length=k; printf("字符串的t的内容为:"); printSeqString(t); } //判断两个字符串是否相等 int equalSeqString (SeqString &s,SeqString &t){ if(s.length!=t.length) printf("字符串不相等!\n"); for(int i=0;s.ch[i]!=t.ch[i]&&s.ch[i]!='\0'&&t.ch[i]!='\0';i++){ if(s.ch[i]==t.ch[i]) return 0; } } //两个字符串连接 void concatSeqString(SeqString &s,SeqString &t){ SeqString s1; int i,j; for(i=0;i<s.length;i++){ s1.ch[i]=s.ch[i]; } for(i=s.length,j=0;j<t.length;j++){ s1.ch[i+j]=t.ch[j]; } s1.ch[i+j]='\0'; s1.length=s.length+t.length; printf("两个字符串连接之后s1的长度为:%d\n",s1.length); printf("字符串的s1的内容为:"); printSeqString(s1); } //求子串返回串s的第i个位置开始的j个字符组成的串 void subSeqString(SeqString &s){ SeqString s2; int i,j;//i表示开始的位置,j表示个数 printf("请输入开始位置i:"); scanf("%d",&i); printf("请输入个数j:"); scanf("%d",&j); int k=0; if(i<1||i>s.length||j<1||j>s.length) printf("错误!"); for(k;k<j;k++){ s2.ch[k]=s.ch[i-1+k]; } s2.length=j; printf("子串s2的长度为:%d\n",s2.length); printf("字符串的s2的内容为:"); printSeqString(s2); } //返回子串s3在主串s中的位置(BF匹配模式) int IndexSeqString (SeqString &s){ SeqString s3; int i=0,k; char ch2; printf("请输入字符串s3(输入#结束):\n"); while ((ch2=getchar())!='#'){ s3.ch[i]=ch2; i++; } s3.ch[i]='\0'; s3.length=i; for(int i=0;i<s.length;i++){ for(int j=0,k=i;j<s3.length;j++){ if(s.ch[i]==s3.ch[j]){ if(j==s3.length) printf("从s的第%d个位置到第%d位",i+1,i+1+j); } else break; } return 0; } } main(){ SeqString s; SeqString t; int k; createSeqString(s); inputSeqString(s); printf("s字符串的长度:%d\n",s.length); printf("字符串的s的内容为:"); printSeqString(s); copySeqString(s,t); printf("t字符串的长度:%d\n",t.length); equalSeqString(s,t); concatSeqString(s,t); subSeqString(s); IndexSeqString(s); }

 

posted @ 2019-05-21 00:24  吕志琪  阅读(733)  评论(0编辑  收藏  举报