1. 程式人生 > >CP 005.字串輸入與字元統計

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等著,電子工業出版社