编辑代码

//5.1.1 顺序串的定义
typedef struct
{
    char data[MaxSize];                                 //存放串字符
    int length;                                         //存放串长
}SqString;                                              //声明顺序表类型

//5.1.2 创建串
void StrAssign(SqString &str,char cstr[])
{
    int i;
    for(i = 0;cstr[i] != '\0';i++)
        str.data[i] = cstr[i];
    str.length = i;
}

//5.1.3 复制串
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;
}

//5.1.4 求串长
int StrLength(SqString s)
{
    return s.length;
}

//5.1.5 连接串
SqString Concat(SqString s,SqString t)
{
    SqString str;
    int i;
    str.length = s.length + t.length;
    for(i = 0;i < s.length;i++)                         //将 s.data[0..s.length - 1]复制到 str
        str.data[i] = s.data[i];
    for(i = 0;i < t.length;i++)                         //将 t.data[0..t.length - 1]复制到 str
        str.data[s.length + i] = t.data[i];
    return str;
}

//5.1.6 求子串
SqString SubStr(SqString s,int i,int j)
{
    SqString str;
    int k;
    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++)                    //将 s.data[i..i + j]复制到 str
        str.data[k - i + 1] = s.data[k];
    str.length = j;
    return str;
}

//5.1.7 插入串
SqString Instr(SqString s1,int i,SqString s2)
{
    int j;
    SqString str;
    str.length = 0;
    if(i <= 0 || i > s1.length + 1)                     //参数不正确时返回空串
        return s1;
    for(j = 0;j < i - 1;j++)                            //将 s1.data[0..i - 2]复制到 str
        str.data[j] = s1.data[j];
    for(j = 0;j < s2.length;j++)                        //将 s2.data[0..s2.length - 1]复制到 str
        str data[i + j - 1] = s2.data[j];
    for(j = i - 1;j < s1.length;j++)                    //将 s1.data[i - 1..s1.length - 1]复制到 str
        str.data[s2.length + j] = s1.data[j];
    str.length = s1.length + s2.length;
    return str;
}

//5.1.8 删除子串
SqString DelStr(SqString s,int i,int j)
{
    int k;
    SqString str;
    str.length = 0;
    if(i <= 0 || i > s.length || i + j > s.length + 1)  //参数不正确时返回空串
        return str;
    for(k = 0;k < i - 1;k++)                            //将 s.data[0..i - 2]复制到 str
        str.data[k] = s.data[k];
    for(k = i + j - 1;k < s.length;k++)                 //将 s.data[i + j - 1..s.length - 1]复制到 str
        str.data[k - j] = s.data[k];
    str.length = s.length - j;
    return str;
}

//5.1.9 输出串
void DispStr(SqString s)
{
    int i;
    if(s.length > 0)
    {
        for(i = 0;i < s.length;i++)
            printf("%c",s.data[i]);
        printf("\n");
    }
}