1. 统计单词数#
点击查看考点
几种 cin 输入方式
输入一行英文, 编写程序得出这句英文有哪些单词, 每个单词出现过几次, 单词不区分大小写, 每个单词以空格隔开.
点击查看解答参考
读取行: 利用
auto getline(std::istream&, std::string&) -> std::istream&
读取一整行.分离单词: 利用
auto operator>>(std::istream&, std::string&) -> std::istream&
每次读取时都会跳过前面的空白符且读取到空白符结束.计数: 使用
std::map<std::string, int>
进行.
参考方法使用了 部分 C++11 和 STL, 即我个人分享幻灯片中推荐的学习范围, 可能有点超纲, 我个人实在找不到其他更简便的方法了.
1#include <cctype>
2#include <iostream>
3#include <map>
4#include <sstream>
5#include <string>
6
7auto to_lower(std::string string) -> std::string {
8 for (auto& ch : string) {
9 ch = static_cast<char>(std::tolower(static_cast<unsigned char>(ch)));
10 }
11 return string;
12}
13
14auto main() -> int {
15 std::string string;
16 std::getline(std::cin, string);
17
18 std::istringstream oss(string);
19
20 std::map<std::string, int> counter;
21 while (oss) {
22 oss >> string;
23 ++counter[to_lower(string)];
24 }
25
26 for (auto const& word_and_count : counter) {
27 std::cout << word_and_count.first << ": ";
28 std::cout << word_and_count.second << '\n';
29 }
30}