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):指针法访问二维数组

posted @ 2020-12-16 14:07  Dk只能爬  阅读(715)  评论(0编辑  收藏  举报