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”(中间的f复用),也就是能否重复计数的问题 #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);//输入完成,enter执行
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; //多分支的case语句 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等著,电子工业出版社