最后的子串在父串中寻找位置的代码写不对,求解
#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);
}