CP 005.字串輸入與字元統計
阿新 • • 發佈:2018-12-03
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() { constvector<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等著,電子工業出版社