如何在C++中设计一个程序,该程序能够接受用户输入多行文本,统计并返回每行中出现次数最多的关键词(不论重复多少次),并确保程序逻辑清晰且有效?
时间: 2024-10-18 11:18:46 浏览: 16
在C++中设计这样的程序,可以分为几个步骤:
1. **用户输入处理**:
- 首先,创建一个循环结构,如`while`或`do-while`,让用户不断输入文本直到他们选择停止。
- 使用`std::getline`函数读取用户的每一行输入,存储到一个容器(如`std::vector<std::string>`)中。
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> inputLines;
```
2. **关键词统计**:
- 创建一个map来存储每个关键词及其出现次数,键是单词,值是整数(初始为0)。
- 对于每行,将其拆分成单词(使用`std::istringstream`或`std::stringstream`)并遍历每个单词。
- 如果单词已经在map中,增加对应的计数;如果不在,则添加新项。
```cpp
void countKeywords(string line) {
istringstream iss(line);
string word;
while (iss >> word) {
if (!word.empty()) { // 去除空格和标点
map<string, int>& wordCount = counts[word];
++wordCount;
}
}
}
```
3. **找出最常见的关键词**:
- 定义一个辅助函数,用于查找和返回出现次数最多的单词及其次数。
```cpp
pair<string, int> mostFrequentKeyword() {
pair<string, int> maxKeyword;
for (const auto& entry : counts) {
if (maxKeyword.second < entry.second) {
maxKeyword = entry;
}
}
return maxKeyword;
}
```
4. **主程序流程**:
- 循环获取输入,统计关键词,然后更新最常见的关键词。
- 最后,退出循环并打印结果。
```cpp
int main() {
while (true) {
string line;
getline(cin, line);
inputLines.push_back(line);
countKeywords(line);
// 添加检查用户是否想要继续的逻辑
bool quit = /* 用户选择停止 */;
if (quit) break;
}
pair<string, int> result = mostFrequentKeyword();
cout << "出现次数最多的关键词是: " << result.first << ", 出现了 " << result.second << " 次" << endl;
return 0;
}
```
阅读全文