标签:com 答案 eof lan input nbsp 学习 auto size
https://www.cnblogs.com/DouglasLuo/p/13221356.html
这道练习题要求我们使用C++统计输入的字符串中a, e, i, o, u这五个字符及其大写的数量。这里其实不难,使用switch语句对输入的字符串挨个进行判断,即可得出算出这五个字符的数量。
后面练习题要求不仅要统计a, e, i, o, u这五个字符及其大写的数量。练习题还要求统计出空格,制表符, 换行符的数量。这里我百度搜了很久都没有搜到符合我心意的答案。这道题难的地方在于,我们之前学习的std::cin无法读入空白字符。关于这个问题,其实使用getline来读取字符串即可解决问题。但是getline虽然会读入换行符,但是再读入string对象的时候会丢弃换行符。我看百度的很多做法都没有解决换行符的问题。但是其实换行符这个问题很简单。只要getline返回了,就说明用户输入了换行符,或输入的EOF。而输入了EOF会得到一个0。因此我们只需要将getline放到while循环的判断中,如果getline返回了0,就跳出循环。如果getline没有返回0,就进入循环体。但是由于getline返回是因为用户输入了换行符。所以当getline一返回就意味着用户输入了换行符。这时候直接将计算换行符的变量递增即可计算出用户输入的换行符。不过由于使用了getline作为输入,所以结束输入就要输入一个EOF才能跳出循环。上代码:
#include <iostream> #include <string> int main() { std::string userInput(""); int enter, table, space; enter = table = space = 0; while (getline(std::cin, userInput)) { enter++; for (auto i : userInput) { switch (i) { case 0x09: table++;break; case 0x20: space++;break; } } } std::cout << "enter: " << enter << std::endl; std::cout << "space: " << space << std::endl; std::cout << "table: " << table << std::endl; return 0; }
标签:com 答案 eof lan input nbsp 学习 auto size
原文地址:https://www.cnblogs.com/DouglasLuo/p/13221356.html