编写一个程序,从键盘上输入一个个单词,每接收到一个单词后,输出该单词是否曾经出现过以及出现次数。可以尝试分别用多重集合(multiset)或映射(map)两种途径实现,将二者进行比较。本题答案你可以任意提交一种方法的代码。
时间: 2024-02-11 17:06:53 浏览: 94
以下是使用 multiset 实现的程序代码:
```C++
#include <iostream>
#include <string>
#include <set>
int main() {
std::multiset<std::string> words; // 多重集合,用于存储单词
std::string word; // 临时存储输入的单词
while (std::cin >> word) {
auto iter = words.find(word); // 查找单词在多重集合中的位置
if (iter == words.end()) { // 如果该单词没有出现过
std::cout << "This word has not appeared before." << std::endl;
words.insert(word); // 将单词插入到多重集合中
} else { // 如果该单词已经出现过
std::cout << "This word has appeared " << words.count(word) << " times." << std::endl;
}
}
return 0;
}
```
以下是使用 map 实现的程序代码:
```C++
#include <iostream>
#include <string>
#include <map>
int main() {
std::map<std::string, int> word_counts; // 映射,用于存储每个单词出现的次数
std::string word; // 临时存储输入的单词
while (std::cin >> word) {
auto iter = word_counts.find(word); // 查找单词在映射中的位置
if (iter == word_counts.end()) { // 如果该单词没有出现过
std::cout << "This word has not appeared before." << std::endl;
word_counts[word] = 1; // 将单词插入到映射中,并将出现次数设置为 1
} else { // 如果该单词已经出现过
std::cout << "This word has appeared " << iter->second << " times." << std::endl;
iter->second++; // 将该单词的出现次数加 1
}
}
return 0;
}
```
两种方法的区别在于,multiset 存储的是单词本身,而 map 存储的是单词和对应的出现次数。因此,使用 multiset 可以比较方便地查找单词是否出现过,但是无法直接获取单词的出现次数;而使用 map 可以方便地获取单词的出现次数,但是需要对每个单词进行额外的计数操作。
阅读全文