文章参考过网上的内容,如有侵权,请联系
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char data[100]; //初始化串
int len; //串长
}SqString;
void DispStr(SqString s)
{
int i;
if (s.len>0)
{
for (i=0;i<s.len;i++)
printf("%c",s.data[i]);
printf("\n");
}
}
void StrAssign(SqString &str,char cstr[])
{ //生成一个其值等于串常亮cstr的串T
int i;
for (i=0;cstr[i]!='\0';i++)
str.data[i]=cstr[i];
str.len=i;
}
SqString SubString(SqString &Sub,SqString S,int pos,int len1)
{ //用Sub返回串S的第pos个字符起长度为len的子串
if(pos<0||pos>S.len||len1<0||len1>S.len-pos+1) {printf("ERROR");}
int i=0,j=pos;
while(len1--)
{
Sub.data[i]=S.data[j];
Sub.len=i+1;
i++;j++;
}
return Sub;
}
int StrCompare(SqString S,SqString T)
{ //若S>t,则返回值>0;若S=t,则返回值=0;若S<t,则返回值<0;
for(int i=0;i<S.len;i++)
{if(S.data[i]!=T.data[i]) return 1;}
return 0;
}
int IndexStr(SqString S,SqString T)
{ //t为非空串。若主串S中存在于T相等的子串
//则返回第一个这样的子串的在S中的位置,否则返回0
int n=S.len;
int m=T.len,i=0;
SqString Sub;
while(i<=n-m+1)
{
SubString(Sub,S,i,m);
if(StrCompare(Sub,T)!=0) ++i;
else return i;
}
//if(i>0) return i; //返回子串在主串中的位置
//else return 0; //S中不存在与T相等的子串
}
int main()
{
SqString S,T,Sub1;
printf("建立串S\n");
StrAssign(S,"abcdefgh");
printf("建立串T\n");
StrAssign(T,"defg");
printf("输出串S\n");
DispStr(S);
printf("输出串T\n");
DispStr(T);
printf("串S中子串T的位置\n");
printf("%d",IndexStr(S,T)+1);
return 0;
}