编写一个程序,从键盘上输入一个个单词,每接收到一个单词后,输出该单词是否曾经出现过以及出现次数。可以尝试分别用多重集合(multiset)或映射(map)两种途径实现,将二者进行比较。本题答案你可以任意提交一种方法的代码。 注:输入一个单词并回车,立即输出出现的次数(用times:次数)表示。输入#结束。 参考的输入输出如下(下面单数行为输入,双数行为输出): hello times:0 world times:0 hello times:1 hello times:2 # 【样例输入】 【样例输出】 【样例说明】 【评分标准】 #include <iostream> #include <string> using namespace std; #include <set> int main() { multiset<string> arr; string s; cin>>s; while(s!="#") { int times=0; cout<<"times:"<<times<<endl; arr.insert(s); cin>>s; } }
时间: 2024-02-03 14:02:17 浏览: 66
从键盘接收一行字符统计有多少个单词数?-C++程序设计
以下是用 multiset 实现的代码:
```c++
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
multiset<string> words;
string word;
while (cin >> word && word != "#") {
auto iter = words.find(word);
if (iter == words.end()) {
cout << "times:0" << endl;
} else {
cout << "times:" << words.count(word) << endl;
}
words.insert(word);
}
return 0;
}
```
以下是用 map 实现的代码:
```c++
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, int> words;
string word;
while (cin >> word && word != "#") {
if (words.find(word) == words.end()) {
cout << "times:0" << endl;
} else {
cout << "times:" << words[word] << endl;
}
words[word]++;
}
return 0;
}
```
两种方法的思路都比较简单:每输入一个单词,就在 multiset 或 map 中查找该单词是否已经出现过,如果是,则输出出现次数,否则输出 0 并将该单词插入 multiset 或 map 中。其中 multiset 的 find 函数返回的是迭代器,可以用 count 函数获取该单词在 multiset 中出现的次数;而 map 的 find 函数返回的是键值对的迭代器,可以直接通过迭代器访问该单词出现的次数。
阅读全文