实现代码:
#include<iostream>
using namespace std;
#define MaxLen 255
struct String{
char ch[MaxLen];
int length;
};
void InitString(String &S){
S.length=0;
}
void StringAssign(String &S,char *chars){
int i=0;
for(i=0;chars[i]!='\0';i++){
S.ch[i]=chars[i];
}
S.length=i;
}
void StringCopy(String &S,String &T){
for(int i=0;i<T.length;i++){
S.ch[i]=T.ch[i];
}
S.length=T.length;
}
bool IsEmpty(String &S){
return S.length==0;
}
int StringLength(String &S){
return S.length;
}
void StringClear(String &S){
S.length=0;
}
bool StringCompare(String &S,String &T){
for(int i=0;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;
}
void StringConcat(String &T,String S1,String S2){
int i=0;
for(i=0;i<S1.length;i++){
T.ch[i]=S1.ch[i];
}
for(int j=i;j<S2.length+i;j++){
T.ch[j]=S2.ch[j-S2.length];
}
T.length=S1.length+S2.length;
}
bool SubString(String &S,String &sub,int pos,int len){
if(pos+len-1>S.length||pos<1||pos>S.length){
cout<<"输入不合法"<<endl;
return false;
}
for(int i=pos-1;i<=pos+len;i++){
sub.ch[i-pos]=S.ch[i];
}
sub.length=len;
return true;
}
int StringIndex(String &S,String &T){
int i=0,n=StringLength(S),m=StringLength(T);
String sub;
for(i=1;i<n-m+1;i++){
SubString(S,sub,i,m);
if(StringCompare(sub,T)==0)
return i;
}
return -1;
}
void PrintString(String &S){
for(int i=0;i<S.length;i++)
cout<<S.ch[i];
cout<<endl;
}
int main(){
String S;
char chars[15]="abcdefg";
InitString(S);
cout<<IsEmpty(S)<<endl;
StringAssign(S,chars);
PrintString(S);
cout<<IsEmpty(S)<<endl;
cout<<"串S的长度为:"<<StringLength(S)<<endl;
String T;
StringCopy(T,S);
PrintString(T);
cout<<"串T的长度为:"<<StringLength(T)<<endl;
cout<<StringCompare(S,T)<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
String Slink;
StringConcat(Slink,T,S);
PrintString(Slink);
cout<<StringCompare(Slink,S)<<endl;
cout<<"串Slink的长度为:"<<StringLength(Slink)<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
String substr;
SubString(S,substr,2,2);
SubString(S,substr,5,6);
PrintString(substr);
cout<<"串substr的长度为:"<<StringLength(substr)<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
cout<<"---------------------"<<endl;
String St;
char chart[15]="cdd";
StringAssign(St,chart);
cout<<StringIndex(S,substr)<<endl;
cout<<StringIndex(S,St)<<endl;
return 0;
}
运行结果: