串的问题如何如何解决




#define MaxSize 100
#include<stdio.h>
#include<string.h>
typedef struct
{
    char data[MaxSize];
    int length;
}SqString;
//串赋值 
void Assign(SqString &s,char str[ ])
{
    int i=0;
    while(str[i]!='\0')
    {
        s.data[i]=str[i];
        i++; 

    }
    s.length=i;
}
//销毁串 
void DestroyStr(SqString s)
{}
//串复制 
void StrCopy(SqString &s,SqString t)
{
    int i;
    for(i=0;i<t.length;i++)
    {
        s.data[i]=t.data[i];
    }
    s.length=t.length;
}
//求串的长度 
int StrLength(SqString s)
{
    return(s.length);
}
//判断串相等 
int StrEqual(SqString s,SqString t)
{
    int i;
    if(s.length!=t.length)
        return 0;
    else
    {
        for(i=0;i<s.length;i++)
            if(s.data[i]!=t.data[i])
                return 0;
        return 1;
    }

}
//串连接 
SqString Concat(SqString s,SqString t)
{
    SqString r;
    int i,j;
    for(i=0;i<s.length;i++)
        r.data[i]=s.data[i];
    for(j=0;j<t.length;j++)
        r.data[s.length+j]=t.data[j];
    r.length=i+j;
    return r;
}
//求子串 
SqString SubStr(SqString s,int i,int j)
{
    SqString t;
    int k;
    if(i<1||i>s.length||j<1||i+j>s.length+1)
        t.length=0;
    else
    {
        for(k=i-1;k<i+j;k++)
            t.data[k-i+1]=s.data[k];
        t.length=j;
    }
    return t;
}
//查找子串位置 
int Index(SqString s,SqString t)
{
    int i=0,j=0;
    while(i<s.length&&j<t.length)
    {
        if(s.data[i]==t.data[i])
        {
            i++;
            j++;
        }
        else
        {
            i=i-j+1;
            j=0;
        }
    }
    if(j>=t.length)
        return i-t.length+1;
    else
        return 0;
}
//子串插入 
 int InsStr(SqString &s,int i,SqString t)
 {
     int j;
     if(i<1||i>s.length)
         return 0;
     else
     {
         for(j=s.length-1;j>=i-1;j--)
             s.data[j+t.length]=s.data[j];
         for(j=0;j<t.length;j++)
             s.data[i+j-1]=t.data[j];
         s.length=s.length+t.length;
         return 1;
    }
 }
//字串删除
int DelStr(SqString &s,int i,int j) 
{
    int k;
    if(i<1||i>s.length||j<1||i+j>s.length+1)
        return 0;
    else
    {
        for(k=i+j-1;k<s.length;k++)
            s.data[k-j]=s.data[k];
        s.length=s.length-j;
        return 1;
    }
}
//字串替换
SqString RepStr(SqString s,SqString s1,SqString s2) 
{
    int i;
    i=Index(s,s1);
    while(i>0)
    {
        DelStr(s,i,s1.length);
        InsStr(s,i,s2);
        i=Index(s,s1);
    }
    return s;
}
//输出串
void DispStr(SqString s)
{
    int i;
    for(i=0;i<s.length;i++)
        printf("%c",s.data[i]);
    printf("\n");
 } 

int main()
{
    SqString s1,s2,s3,s4,s5,s6,s7;
    Assign(s1,"abcd");
    printf("s1:");
    DispStr(s1);
    printf("s1的长度:%d\n",StrLength(s1));
    printf("s1=>s2\n");
    StrCopy(s2,s1);
    printf("s2:");
    DispStr(s2);
    printf("s1和s2%s\n",(StrEqual(s1,s2)==1?"相同":"不相同"));
    Assign(s3,"12345678");
    printf("s3:");
    DispStr(s3);
    printf("s1和s3连接=>s4\n");
    s4=Concat(s1,s3);
    printf("s4:");
    DispStr(s4);
    printf("s3[2..5]=>s5\n");
    s5=SubStr(s3,2,4);
    printf("s5:");
    DispStr(s5);
    Assign(s6,"567");
    printf("s6:");
    DispStr(s6);
    printf("s6在s3中的位置:%d\n",Index(s3,s6));
    printf("从3中删除s3[3..6]字符\n");
    DelStr(s3,3,4);
    printf("s3:");
    DispStr(s3);
    printf("从s4中将s6替换成s1=>s7\n");
    s7=RepStr(s4,s6,s1);
    printf("s7:");
    DispStr(s7);
    DestroyStr(s1);
    DestroyStr(s2);
    DestroyStr(s3);
    DestroyStr(s4);
    DestroyStr(s5);
    DestroyStr(s6);
    DestroyStr(s7);
}



img


应该怎么改呢

img