用定长顺序存储结构表示串
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
void Cancat(SString T,SString S1,SString S2){
char i;
if(S1[0]+S2[0]<=MAXSTRLEN){
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=S2[0];i++)
T[S1[0]+i]=S2[i];
T[0]=S1[0]+S2[0];
}
else if(S1[0]
T[i]=S1[i];
for(i=1;i<=(MAXSTRLEN-S1[0]);i++)
T[S1[0]+i]=S2[i];
T[0]=MAXSTRLEN;
}
else{
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
T[0]=MAXSTRLEN;
}
}
void printfSString(SString s){
char i;
for(i=1;i<=s[0];i++)
printf("%c",s[i]);
}
void SubString(SString sub,SString s,int pos,int len){
int i;
if(pos<1||pos>s[0]||len<0||len>s[0]-pos+1){
printf("输入错误!");
return;
}
for(i=1;i<=len;i++,pos++)
sub[i]=s[pos];
sub[0]=len;
}
int strcmp(SString sub,SString T){
char i;
for(i=1;iif(sub[i]!=T[i])
return 0;
return 1;
}
int Index(SString s,SString T,int pos){
SString sub; int i,n,m;
if(pos>0){
n=s[0];
m=T[0];
i=pos;
while(i<=n-m+1){
SubString(sub,s,i,m);
if(strcmp(sub,T)!=0)
++i;
else
return i;
}
}
return 0;
}
void creatSString(SString s,char t[]){
int i=0;
while(t[i]!='\0'){
s[i+1]=t[i];
i++;}
s[0]=i;
}
void main(){
SString s1;
SString s2;
SString ss;
SString sub;
SString T;
int a,b,c;
creatSString(s1,"abcd");
creatSString(s2,"efg");
Cancat(ss,s1,s2);
printf("输出所求字串在SS:\n");
printfSString(ss);
printf("\n");
printf("输入所求字串在SS中的第一个字符的位置:");
scanf("%d",&a);
printf("输入所求字串的长度:");
scanf("%d",&b);
printf("得到的串为:\n");
SubString(sub,ss,a,b);
printfSString(sub);
printf("\n");
creatSString(T,"bcd");
printf("输入在SS串:");
scanf("%d",&c);
a=Index(ss,T,c);
if(a=0)
printf("主串S无与T相等的字串!");
else
printf("主串S存在与T相等的字串!");
}