编辑代码

#include <stdio.h>
#define MAXLEN 100
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; 
}