在Dev-C++上编写一个C++、程序(应该有多个函数),允许从键盘输入任意多个英语单词(单词可以重复),中间用空格分开,输入0表示输入结束。该程序可以统计同一个英语单词被输入几次,最后对英文单词按字典顺序输出,后面跟上该单词被输入的次数。(提示,尝试用结构体组织数据,把单词和该单出现的次数用一个结构体来描述。) 比如输入: book am book is book am 0 输出:am 2 book 3 is 1
时间: 2025-06-26 20:24:09 浏览: 15
### 实现思路
为了完成此功能,可以采用以下方法:
1. **读取输入字符串**:通过 `std::cin` 或其他方式获取用户的输入。
2. **分割单词**:利用 C++ 的字符串处理工具(如 `std::istringstream`),将输入的字符串拆分为单独的单词。
3. **统计词频**:使用 STL 容器中的 `std::map<std::string, int>` 来存储每个单词及其对应的出现次数。`std::map` 自动按键值(即单词)进行排序。
4. **输出结果**:遍历 `std::map` 并打印每个单词及其对应频率。
以下是完整的代码实现[^1]:
```cpp
#include <iostream>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;
int main() {
string input;
cout << "请输入一段英文文字:" << endl;
getline(cin, input);
map<string, int> wordCountMap; // 使用 map 存储单词和其计数
istringstream iss(input);
string word;
while (iss >> word) {
// 去除标点符号并转换为小写
transform(word.begin(), word.end(), word.begin(), ::tolower);
word.erase(remove_if(word.begin(), word.end(), [](char c) { return !isalpha(c); }), word.end());
if (!word.empty()) {
wordCountMap[word]++;
}
}
// 输出按字典序排列的结果
for (const auto& pair : wordCountMap) {
cout << pair.first << ": " << pair.second << endl;
}
return 0;
}
```
#### 关键点解析
- **去除标点符号与大小写统一**:
在实际应用中,通常需要忽略大小写差异以及移除非字母字符。上述代码中使用了 `transform` 和自定义 lambda 表达式来清理单词[^2]。
- **STL 容器的选择**:
这里选择了 `std::map` 而不是 `std::unordered_map`,因为前者能够自动按照键值(这里是单词)的字典顺序排序[^3]。
- **输入流操作**:
使用 `std::getline` 获取整行输入,并借助 `std::istringstream` 将其分解成单个单词。
---
###
阅读全文
相关推荐







