CP 005.字符串输入与字符统计

1.数字成绩输出为字母等级

//美国大学的分数制

//例子:假设数字成绩的范围是从0到100,其中100分对应的字母形式是“A++”,低于60分的成绩对应的字母形式是“F”。
//其他成绩每10个划分一组:60到69(包括69在内)对应字母“D”,70到79对应字母“C”,依此类推。

//--------if-else语句嵌套-------------//

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    const vector<string> scores = { "F","D","C","B","A","A++" };
    string lettergrade; //字母成绩
    unsigned int grade = 0;
    cout << "请输入成绩:";
    cin >> grade;

    if (grade < 60)
        lettergrade = scores[0];
    else
    {
        lettergrade = scores[(grade - 50) / 10]; //C++代码的精简
        //新需求:
        //给那些合格的成绩后面添加一个加号或减号。如果成绩的末位是8或9,添加一个加号;
        //如果末位是0,1或2,添加一个减号
        if (grade % 10 > 7)
        {
            lettergrade += "+";
        }
        else if (grade % 10 < 4)
        {
            lettergrade += "-";
        }
    }

    cout << "你的成绩是:" << lettergrade << endl;

    return 0;
}

2.特定字母和空格等统计

#include <iostream>
#include <string>

using namespace std;

int main()
{
    char s;
    unsigned int vowelCnt = 0;
    unsigned int spaceCnt = 0;
    unsigned int tabCnt = 0;
    unsigned int newlineCnt = 0;
    //注意,此时不能使用cin,因为cin会自动忽略空格

    //cin.get(ch):输入一个字符(含空格)
    //getline(cin,string):输入一行文本(保留空格)

    while (cin.get(s))
    {
        switch (s)
        {
            //小写字母

//if(s=='a'||s=='i'||s=='o'||s=='u'||s=='e')
    //++vowelCnt;

        case 'a':
        case 'i':
        case 'o':
        case 'u':
        case 'e':
            //大写字母
        case 'A':
        case 'I':
        case 'O':
        case 'U':
        case 'E':
            ++vowelCnt;
            break;

            //newline (左斜杠),换行符
        case '\n':
            ++newlineCnt;
            break;

            //space,空间
        case ' ':
            ++spaceCnt;
            break;

            //tab (左斜杠),制表符
        case '\t':
            ++tabCnt;
            break;

        default:
            break;
        }
    }

    cout << "元音字母的个数:" << vowelCnt << endl;
    cout << "空格数量:" << spaceCnt << endl;
    cout << "换行符数量:" << newlineCnt << endl;
    cout << "制表符数量:" << tabCnt << endl;

    return 0;
}

3.含空格字符串的输入

//统计以下含有两个字符的字符序列的数量:ff,fi,fl

//首先思考一个问题:ffififffl,统计方式的确定
//ffi,计算为一个“ff+i”,还是“ff+fi”,也就是能否重复计数的问题



#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    unsigned int ffCnt = 0;
    unsigned int fiCnt = 0;
    unsigned int flCnt = 0;

    //注意,此时不能只是简单使用cin,因为cin会自动忽略空格
    cout << "请输入一个字符序列,可包含空格:" << endl;
    getline(cin, s);
    for (auto beg = s.cbegin(), end = s.cend(); beg != (end - 1); ++beg)
    {
        ////---------------假定不可重复计数----------//
        //        if (*beg == 'f')
        //        {
        //            //beg如果指向f,则会有+2,此时属于不重复计数
        //            switch (*(++beg)) {
        //            case 'f':
        //                ++ffCnt;
        //                break;
        //            case 'i':
        //                ++fiCnt;
        //                break;
        //            case 'l':
        //                ++flCnt;
        //                break;
        //            default:
        //                break;
        //            }
        //        }

        ///////////----------假定可重复计数--------////////////
        if (*beg == 'f')
        {
            auto p = beg + 1;
            switch (*p) {
            case 'f':
                ++ffCnt;
                break;
            case 'i':
                ++fiCnt;
                break;
            case 'l':
                ++flCnt;
                break;
            default:
                break;
            }
        }
    }

    //cin.get(ch):输入一个字符(含空格)
    //getline(cin,string):输入一行文本(保留空格)

    cout << "ff数量:" << ffCnt << endl;
    cout << "fi数量:" << fiCnt << endl;
    cout << "fl数量:" << flCnt << endl;

    return 0;
}

参考资料:

1.《C++ Primer》中文版(第五版),Stanley B.Lippman等著,电子工业出版社

2.《C++ Primer》习题集(第五版),Stanley B.Lippman等著,电子工业出版社

猜你喜欢

转载自www.cnblogs.com/paulprayer/p/10060692.html
cp