typedef struct{
char ch[MAXLEN];
int len;
}SString;
SString StrConcat (SString s,SString t){
SString s1;
int i;
if(s.len+t.len<=MAXLEN){
for(i=0;i<s.len;i++)
s1.ch[i]=s.ch[i];
for(i=0;i<t.len;i++)
s1.ch[s.len+i]=t.ch[i];
s1.len=s.len+t.len;
}
else
s1.len=0;
return(s1);
}
int StrCompare(SString s,SString t){
int i;
if(s.len!=t.len)
return (0);
else{
for(i=0;i<s.len;i++)
if(s.ch[i]!=t.ch[i])
return (0);
}
return (1);
}
int SubString(SString *sub,SString s,int pos,int len){
int i;
if (pos<0||pos>s.len||len<1||len>s.len-pos){
sub->len=0;
return(0);
}
else{
for (i=0;i<len;i++)
sub->ch[i]=s.ch[i+pos-1];
sub->len=len;
return(1);
}
}
void StrInsert(SString *s,SString t,int pos){
int j;
if(s->len+t.len>=MAXLEN||(pos>s->len+1)||(pos<1))
printf("overflow\n");
else{
for(j=s->len;j>=pos;j--)
s->ch[j+t.len-1]=s->ch[j-1];
for(j=0;j<t.len;j++)
s->ch[j+pos-1]=t.ch[j];
s->len=s->len+t.len;
s->ch[s->len]='\0';
}
}
void StrDelete(SString *s,int pos,int len){
int k;
if((pos<1)||(pos>s->len))
printf("error\n");
else
if(s->len-pos+1<len)
s->len=pos-1;
else{
for(k=pos+len-1;k<=s->len;k++)
s->ch[k-len]=s->ch[k];
s->len=s->len-len;
}
}
int main(){
SString s0={"Beijing Shanghai China",22},
s1={"Beijing ",8},
s2={"China",5},s,s3;
s=StrConcat(s1,s2);
printf("\n%s\n%d",s.ch,s.len);
printf("\n%d\n",StrCompare(s1,s2));
SubString(&s3,s,1,7);
printf("\n%s\n",s3.ch);
StrInsert(&s3,s2,1);
printf("\n%s\n",s3.ch);
StrDelete(&s,9,5);
printf("\n%s\n",s.ch);
return 0;
}