串的基本操作实现
定长顺序存储
类型定义
typedef struct{
char ch[MAXLEN];
int length;
}SString;
赋值操作
int StringAssign(SString *T,char a[]){
if(strlen(a)>MAXLEN)
return 0;
for(int i=1;a[i-1]!='\0';i++)
T->ch[i]=a[i-1];
T->length=strlen(a);
return 1;
}
复制操作
int StrCopy(SString *T,SString S){
if(MAXLEN<S.length)
return 0;
for(int i=1;i<=S.length;i++)
T->ch[i]=S.ch[i];
T->length=S.length;
return 1;
}
判空操作
int StrEmpty(SString S){
if(S.length==0)
return 0;
else
return 0;
}
比较操作
int 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];
}
return S.length-T.length;
}
求字串
int SubString(SString *Sub,SString S,int pos,int len){
if(pos+len-1>S.length)
return 0;
for(int i=pos;i<pos+len;i++)
Sub->ch[i-pos+1]=S.ch[i];
Sub->length=len;
return 1;
}
定位操作
int Index(SString S,SString T){
int i=1 , n=StrLength(S) , 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;
}