zoukankan      html  css  js  c++  java
  • 数据结构作业-第四章-串-顺序串的基本运算

    顺序串的各种基本运算

    目的:领会顺序串存储结构和掌握顺序串中的各种基本运算算法设计

    内容: 编写一个程序sqstring.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp 完成以下功能

    (1)建立串:s="abcdefghefghijklmn"和串s1="xyz";
    (2)输出串s;
    (3)输出串的长度;
    (4)在串的第9个字符位置插入串s1而产生串s2;
    (5)输出串s2;
    (6)删除串s第2个字符开始的5个字符而产生串s2;
    (7)输出串s2;
    (8)将串s第2个字符开始的5个字符替换成串s1而产生s2;
    (9)输出串s2;
    (10)提取串s的第2个符号开始的10个字符而产生串s3;
    (11)输出串s3;
    (12)将串s1和串s2连接起来而产生串s4;
    (13)输出串s4。
    

    exp4-1.cpp

    #include<stdio.h>
    #include<stdlib.h>
    #define MaxSize 50
    typedef char ElemType;
    typedef struct
    {
        char data[MaxSize];
        int length;
    }SqString;
    void StrAssign(SqString& s,const char c[])            //生成串,传入从循环中以数组进行是放入C
    {
        int i;
        for (i = 0; c[i] != ''; i++)
        {
            s.data[i] = c[i];
        }
        s.length = i;                                //设置s的长度;
    }
    void DestroyStr(SqString& s)
    {
    }
    void StrCopy(SqString s, SqString t)             //串的复制
    {
        for (int i = 0; i < t.length; i++)   //将数组的一个个拷贝到T,并且长度也要相等方便后面长度算法直接调用
            s.data[i] = t.data[i];
        s.length = t.length;
    }
    int StrLength(SqString s)
    {
        return s.length;
    }
    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;
    }
    SqString SubStr(SqString s, int i, int j)             //求子串SubStr(s,i,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;
    }
    SqString InsStr(SqString s1, int i, SqString s2)
    {
        int j;
        SqString str;
        str.length = 0;
        if (i <= 0 || i > s1.length + 1)
            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;
    }
    SqString Delstr(SqString s, int i, int j)
    {
        int k;
        SqString str;
        str.length = 0;
        if (i <= 0 || i > s.length || j<0 || i + j>s.length + 1)
            return str;
        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;
    }
    SqString RepStr(SqString s, int i, int j, SqString t)
    {
        int k;
        SqString str;
        str.length = 0;
        if (i <= 0 || i > s.length + 1)
            return str;
        for (k = 0; k < t.length; k++)
            str.data[k] = s.data[k];
        for (k = 0; k < t.length; k++)
            str.data[t.length + k - j] = s.data[k];
        str.length = s.length - j + t.length;
        return str;
    }
    void DisStr(SqString s)
    {
        int i;
        if (s.length > 0)
        {
            for (i = 0; i < s.length; i++)
                printf("%c", s.data[i]);
            printf("
    ");
        }
    }
    int main()
    {
        SqString s, s1, s2, s3, s4;
        printf("顺序串的各种基本运算算法如下: 
    
    ");
        printf("(1).建立串s='abcdefghijklmn'和串s1='xyz'
    ");
        StrAssign(s, "abcdefghijklmn");
        StrAssign(s1, "xyz");
        printf("(2).输出串s:  
    ");
        DisStr(s);
        printf("(3).输出串s的长度:%d
    ", StrLength(s));
        printf("(4).在串s的第9个字符位置插入串s1而产生s2
    ");
        s2 = InsStr(s, 9, s1);
        printf("(5).输出s2: 
    ");
        DisStr(s2);
        printf("(6).删除串S的第二个字符开始的5个字符而产生串s2
    ");
        s2 = Delstr(s, 2, 5);
        printf("(7).输出串s2:   
    ");
        DisStr(s2);
        printf("(8).将串s的第二个字符开始的5个字符替换成串s1而产生s2
    ");
        s2 = RepStr(s, 2, 5, s1);
        printf("(9).输出串s2:  
    ");
        DisStr(s2);
        printf("(10).提取串s的第二个字符开始的10个字符而生成串s3
    ");
        s3 = SubStr(s, 2, 10);
        printf("(11).输出串s3:   
    ");
        DisStr(s3);
        printf("(12).将串s1和串s2连接起来而产生串s4
    ");
        s4 = Concat(s1, s2);
        printf("(13).输出串s4:   
    ");
        DisStr(s4);
        return 0;
    }
    
    

    运行结果

  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/DTsec/p/15492421.html
Copyright © 2011-2022 走看看