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;
    }
    
    

    运行结果

  • 相关阅读:
    CMMI的5个级别
    ubuntu下的烧录工具
    Git 安装配置
    使用 Git & Repo 下载代码
    Git 忽略文件
    Git rebase
    使用Git进行本地提交后,未上传提交,却不小心删除了本地提交或提交所在分支,怎么办?????
    Repo
    IOS关于UIViewController之间的切换
    PresentModalViewController
  • 原文地址:https://www.cnblogs.com/DTsec/p/15492421.html
Copyright © 2011-2022 走看看