The code in Data book (5th Edition) from the 123 page to 126 page
typedef struct {
char data[MaxSize]; //Stored string Character
int length; //Stored string length
} SqString; //Sequential string type
//Generated string
void StrAssign(SqString &s, char cstr[]) {
int i;
for(i=0; cstr[i]!='\0'; i++) {
s.data[i]=cstr[i];
}
s.length=i; //Set string s length
}
//Destroyed string
void DestroyStr(SqString &s) {}
//Copy string
void StrCopy(SqString &s, SqString t) {
for(int i=0; i<t.length; i++) {
s.data[i]=t.data[i]; //Copy all character of t
}
s.length=t.length; //Set length of string s
}
//Judge string equality
bool StrEqual(SqString s, SqString t) {
bool same=true;
if(s.length!=t.length) { //When string length not equal return 0
same=false;
}
else
for(int i=0; i<s.length; i++)
if(s.data[i]!=t.data[i]) { //When have a character not equal return false
same=false;
break;
}
return same;
}
//Get string length
int StrLength(SqString s) {
return s.length;
}
//Connection string
SqString Concat(SqString s,SqString t) {
SqString str;
int i;
str.length=s.length+t.length;
for(i=0; i<s.length; i++)
str.data[i]=s.data[i];
for(i=0; i<t.length; i++)
str.data[s.length+i]=t.data[i];
return str;
}
//Get substring
SqString SubStr(SqString s,int i,int j) {
int k;
SqString str;
str.length=0;
if(i<=0||i>s.length||j<0||i+j-1>s.length)
return str;
for(k=i-1; k<i+j-1; k++)
str.data[k-i+1]=s.data[k];
str.length=j;
return str;
}
//Insert substring
SqString InsStr(SqString s1,int i,SqString s2) {
int j;
SqString str;
str.length=0; //Set ser is empty string
if(i<=0||i>s1.length+1) //When parameters incorrect return empty string
return str;
for(j=0; j<i-1; j++)
str.data[j]=s1.data[j];
for(j=0; j<s2.length; j++)
str.data[i+j-1]=s2.data[j];
for(j=i-1; j<s1.length; j++)
str.data[s2.length+j]=s1.data[j];
str.length=s1.length+s2.length;
return str;
}
//Delete substring
SqString DelStr(SqString s,int i,int j) {
int k;
SqString str;
str.length=0; //Set str is empty string
if(i<=0||i>s.length||i+j>s.length+1)
return str; //When parameters incorrect return empty string
for(k=0; k<i-1; k++)
str.data[k]=s.data[k];
for(k=i+j-1; k<s.length; k++)
str.data[k-j]=s.data[k];
str.length=s.length-j;
return str;
}
//Replace substring
SqString RepStr(SqString s,int i,int j,SqString t) {
int k;
SqString str; //Defined results string
str.length=0; //Set ser is empty string
if(i<=0||i>s.length||i+j-1>s.length)
return str; //When parameters incorrect return empty string
for(k=0; k<i-1; k++)
str.data[k]=s.data[k];
for(k=0; k<t.length; k++)
str.data[i+k-1]=t.data[k];
for(k=i+j-1; k<s.length; k++)
str.data[t.length+k-j]=s.data[k];
str.length=s.length-j+t.length;
return str;
}
//Output string
void DispStr(SqString s) {
if(s.length>0) {
for(int i=0; i<s.length; i++)
printf("%c",s.data[i]);
printf("\n");
}
}
如有侵权,请联系作者删除