#include
#include
#include
#define MaxSize 255
typedef struct{
char ch[MaxSize];
int length;
}SString;
//初始化
SString InitStr(SString &S){
S.length=0;
return S;
}
//为了方便计算,串的下标从1开始计算
//给串赋值
SString SetStr(SString &S){
char c;
int i=1;
scanf("%c",&c);
while(c!='\n'){
S.ch[i++]=c;
S.length++;
scanf("%c",&c);
}
return S;
}
//返回字符串的长度
int StrLength(SString &S){
return S.length;
}
//清空字符串
void ClearStrinf(SString &S){
S.length=0;
}
//求字符串的字串
bool SubString(SString &Sub,SString &S,int pos,int len){
if(pos+len-1>S.length) return false;//字串超出范围
for(int i=pos;i<pos+len;i++){
Sub.ch[i-pos+1] = S.ch[i];
}
Sub.length = len;
return true;
}
//比较字符串
bool StrCompare(SString &S,SString &T){
for(int i=1;i<=S.length && i<=T.length;i++){
if(S.ch[i]!=T.ch[i])//进行字符比较
return S.ch[i]-T.ch[i];// S>T:>0,S
}
return S.length-T.length;//所有字符都相同,长度大的串更大
}
//定位操作
int Index(SString &S,SString &T){
int i=0;
int n=StrLength(S);
int m=StrLength(T);
SString Sub;//暂时存字串
while(i<=n-m+1){
SubString(Sub,S,i,m);
if(StrCompare(Sub,T)!=0) i++;
else return i;//返回字串在主串的位置
}
return 0;//不存在与T匹配的字串
}
//显示串
void ShowString(SString &S){
for(int i=1;i<S.length;i++){
printf("%c",S.ch[i]);
}
printf("\n");
}
int main(){
printf("设置串:");
SString S;
InitStr(S);
SetStr(S);
int len1;
len1=StrLength(S);
printf("串长度为:%d\n",len1);
printf("设置字串:");
SString D;
InitStr(D);
SetStr(D);
int len2;
len2=StrLength(D);
printf("子串长度为:%d\n",len2);
printf("\n");
printf("-----------求字符串的字串-------------\n");
SString Sub;
int pos,len;
printf("输入截取的起始位置和长度:");
scanf("%d,%d",&pos,&len);
if(SubString(Sub,S,pos,len)) {
printf("截取后的字串\n");
ShowString(Sub);
}
else printf("截取失败\n");
printf("\n");
printf("-------------定位字串-------------\n");
int i;
i=Index(S,D);
if(i) printf("字串定位:%d",i);
else printf("字串定位失败\n");
return 0;
}
