• C++第六章作业(mooc)


     

    问题一

    题目内容:

    从键盘输入一个字符串,并在串中的第一次出现的最大元素后边插入字符串”ab”

    输入格式:

    任意输入一个字符串

    输出格式:

    在串中的最大元素后边插入字符串”ab”

    输入样例:

    123csCUMT

    输出样例:

    123csabCUMT

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        string s;
        int max = 0, i, maxplace=0;
        cin >> s;
        for (i = 0; i < s.size(); i++)
        {
            if ((int)s[i] > max)
            {
                max = (int)s[i];
                maxplace = i;
            }
        }
        for (i = 0; i <=maxplace; i++)
            cout << s[i];
        cout << "ab";
        for (i = maxplace + 1; i < s.size(); i++)
            cout << s[i];
        return 0;
    }

    记得初始化数据

    问题2

    题目内容:

    输入一个字符串,其包括数字和非数字字符,如:a123x456 17935? 098tab,将其中连续的数字作为一个整数,依次存放到数组a中,统计共有多少个整数,并输出这些数。

    输入格式:

    数字和非数字字符的字符串

    输出格式:

    1)整数个数2)分别输出整数

    输入样例:

    a123x456 17935? 098tab583【注意需要保留带有空格的字符串,请不要使用getscin,练习使用cin.getline(char *str, int maxnum)

    输出样例:

    5

    123

    456

    17935

    98

    583

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        string s;
        int num = 0, i;
        getline(cin, s);
        if (s[0] <= '9' && s[0] >= '0')
            num++;
        for (i = 1; i < s.size(); i++)
        {
            if ((s[i] >= '0' && s[i] <= '9') && (s[i - 1] < '0' || s[i - 1]>'9'))
                num++;
        }
        cout << num<<endl;
        for (i = 0; i < s.size(); i++)
        {
            if((s[i]<'0'||s[i]>'9')||(s[i]=='0'&&(s[i-1]<'0'||s[i-1]>'9')&&(s[i+1]<='9'&&s[i+1]>='0')))
                continue;
            while (s[i] <= '9' && s[i] >= '0')
            {
                cout << s[i];
                i++;
            }
            cout << endl;
        }
        return 0;
    }

    需要判断几个条件

    1.开头是0,num++
    2.开头非零,s[i]为数字,s[i-1]不是数字,num++
    3.如果不是数字或者(这个数为0,前一个不是数字,后一个是数字),溜溜球
       不然的话就输出它,然后移到下一位,判断是否是数字,是就输出,不是就跑路

    对于 for 循环,continue 语句会导致执行条件测试和循环增量部分
     

    问题三

    题目内容:

    5个字符串,首先将它们按照字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。

    输入格式:

    5个字符串,用回车分隔

    输出格式:

    输出一个字符串:按5个字符串中字符个数由小到大排序,每个字符串后面有一个空格;再分别取出每个字符串的第三个字母合并成一个新的字符串输出,若少于三个字符的输出空格

    输入样例:

    test1234

    123test

    cumt

    think

    apples

    输出样例:

    cumt think apples 123test test1234

    concatenate string:mip3s

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
        char* s[5] = {};
        char* temp = {};
        int i, j;
        for (i = 0; i < 5; i++)
        {
            s[i] = new char[50];
            cin >> s[i];
        }
        for (i = 0; i < 4; i++)
        {
            for (j = 0; j < 4 - i; j++)
            {
                if (strlen(s[j]) > strlen(s[j + 1]))
                {
                    temp = s[j];
                    s[j] = s[j + 1];
                    s[j + 1] = temp;
                }
            }
        }
        for (i = 0; i < 5; i++)
            cout << s[i] << ' ';
        cout << endl;
        cout << "concatenate string:";
        for (i = 0; i < 5; i++)
        {
            if (strlen(s[i]) < 3)
                cout << ' ';
            else
                cout << s[i][2];
        }
        
        return 0;
    }

    strlen()函数在头文件<cstring>下面而不是<string>

    用new的方式开辟二维数组,行用来存放输入的字符串,列用来提取字符。

    选择排序法要排(n-1)次

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
        char s[5][20];
        char* p[5], * temp;
        int len[5], ltemp;
        for (int i = 0; i < 5; i++)
            p[i] = s[i];
        for (int i = 0; i < 5; i++)
            cin >> p[i];
        for (int i = 0; i < 5; i++)
            len[i] = strlen(p[i]);
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4 - i; j++)
            {
                if (len[j] > len[j + 1])
                {
                    ltemp = len[j];
                    len[j] = len[j + 1];
                    len[j + 1] = ltemp;
                    temp = p[j];
                    p[j] = p[j + 1];
                    p[j+ 1] = temp;
    
                }
            }
        }
        for (int i = 0; i < 5; i++)
            cout << p[i] << ' ';
        cout <<endl<< "concatenate string:";
        for (int i = 0; i < 5; i++)
        {
            if (len[i] < 3)
                cout << ' ';
            else
                cout << *(p[i]+2);
        }
        return 0;
    }

    定义了一个指针数组,里面的元素都是指针,指向一个一维数组,上面的方法是用new的方式开辟一个新数组。

    *(p[i]+2):指针法访问二维数组

  • 相关阅读:
    MySQL 8 新特性之持久化全局变量的修改
    MySQL 8 新特性之Invisible Indexes
    pt-align
    Go碎碎念
    flask开发过程中的常见问题
    MySQL高可用方案MHA自动Failover与手动Failover的实践及原理
    MySQL高可用方案MHA在线切换的步骤及原理
    深度解析MySQL启动时报“The server quit without updating PID file”错误的原因
    MongoDB副本集的常用操作及原理
    MongoDB副本集的搭建
  • 原文地址:https://www.cnblogs.com/dk2154/p/14143561.html
Copyright © 2020-2023  润新知