编写一个C++程序(应该有多个函数),允许从键盘输入任意多个英语单词(单词可以重复),中间用空格分开,输入0表示输入结束。该程序可以统计同一个英语单词被输入几次,最后对英文单词按字典顺序输出,后面跟上该单词被输入的次数。(提示,尝试用结构体组织数据,把单词和该单出现的次数用一个结构体来描述。) 比如输入: book am book is book am 0 输出:am 2 book 3 is 1
时间: 2025-06-26 10:23:40 浏览: 11
### 实现需求的C++程序
以下是基于题目描述设计的一个完整的 C++ 程序,它能够满足以下功能:
1. 接收用户输入的一系列英语单词,直到遇到 `'0'` 为止。
2. 使用结构体来存储每个单词及其出现的次数。
3. 统计并按照字典顺序输出每个单词及其对应的出现次数。
#### 完整代码实现
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// 定义结构体用于存储单词和其出现次数
struct WordCount {
string word;
int count;
};
bool compare(const WordCount& a, const WordCount& b) {
return a.word < b.word; // 按照字典序比较
}
int main() {
vector<WordCount> words; // 存储所有唯一的单词及其计数
string input;
while (cin >> input && input != "0") { // 循环读取输入直到遇到 '0'
bool found = false;
for (auto& wc : words) { // 遍历已存在的单词列表
if (wc.word == input) { // 如果找到相同的单词,则增加计数
wc.count++;
found = true;
break;
}
}
if (!found) { // 如果未找到相同单词,则新增记录
words.push_back({input, 1});
}
}
sort(words.begin(), words.end(), compare); // 对单词按字典序排序
// 输出结果
for (const auto& wc : words) {
cout << wc.word << ": " << wc.count << endl;
}
system("pause");
return 0;
}
```
---
### 功能解析
上述程序实现了以下几个核心部分:
1. **结构体定义**
结构体 `WordCount` 被用来存储两个字段:一个是单词本身 (`word`),另一个是该单词出现的次数 (`count`)。这使得我们可以方便地管理每个单词的相关信息[^1]。
2. **输入处理逻辑**
使用 `while(cin >> input)` 来不断读取用户的输入,直到检测到字符 `'0'` 作为终止条件。对于每一个输入的单词,程序会遍历现有的单词列表,判断是否存在相同的单词。如果存在则更新计数;如果不存在则将其作为一个新的条目加入列表中。
3. **排序操作**
利用了标准库函数 `sort()` 和自定义比较器 `compare` 函数对所有的单词按照字典顺序进行排列。此过程确保最终输出的结果是以字母升序展示的。
4. **输出格式化**
最终通过循环迭代整个 `words` 向量,并逐项打印出每个单词与其对应的出现频率。
---
###
阅读全文