C++primer 6.12习题答案 正解
### C++ Primer 6.12习题答案解析:寻找连续重复出现的单词 #### 题目背景与目标 本题目出自C++ Primer一书第6章的习题6.12,主要目的是帮助读者理解和掌握如何使用C++中的基本输入输出流、字符串(string)操作以及简单的循环控制结构来解决实际问题。题目要求编写一个C++程序,用于从标准输入读取一系列字符串,并找出其中连续重复出现的单词。此外,还需要记录并输出重复次数最多的单词及其重复次数。 #### 题目解析 根据题目描述,我们需要完成以下几个任务: 1. **读取输入**:从标准输入读取一系列字符串。 2. **识别重复**:检测连续重复出现的单词。 3. **统计次数**:记录每个单词重复出现的次数。 4. **输出结果**:输出重复次数最多的单词及其重复次数。 #### 程序设计思路 为了解决上述问题,我们可以采用如下的步骤进行程序设计: 1. **初始化变量**: - `currword` 和 `preword` 分别表示当前单词和前一个单词; - `currcnt` 用于记录当前单词的连续重复次数; - `maxcnt` 记录目前为止最大重复次数; - `repword` 存储重复次数最多的单词。 2. **读取输入**: - 使用 `cin` 从标准输入读取单词。 3. **比较和更新**: - 比较当前单词 `currword` 和前一个单词 `preword`。 - 如果两个单词相同,则增加 `currcnt` 的值。 - 否则,如果 `currcnt` 大于 `maxcnt`,则更新 `maxcnt` 和 `repword`;同时将 `currcnt` 重置为 1。 4. **记录前一个单词**: - 在每次循环结束时,将 `currword` 赋值给 `preword`。 5. **输出结果**: - 在循环结束后,检查 `maxcnt` 的值是否大于 1。 - 如果大于 1,则输出重复次数最多的单词及其重复次数;否则输出没有重复的单词。 #### 代码实现细节 以下是具体代码实现的关键部分解析: ```cpp #include <iostream> #include <string> using namespace std; int main() { string currword, preword; string repword; int currcnt = 0; int maxcnt = 1; while (cin >> currword) { if (currword == preword) { ++currcnt; if (currcnt > maxcnt) { maxcnt = currcnt; repword = preword; } } else { if (currcnt > maxcnt) { maxcnt = currcnt; repword = preword; } currcnt = 1; } preword = currword; } if (maxcnt != 1) cout << repword << " times is " << maxcnt << endl; else cout << "no repeated word!"; return 0; } ``` 1. **导入必要的头文件**: - `#include <iostream>`:用于输入输出。 - `#include <string>`:用于处理字符串。 2. **使用命名空间**: - `using namespace std;`:简化代码,避免每次使用 `std::` 前缀。 3. **主函数**: - `int main()`:程序入口点。 4. **循环读取输入**: - `while (cin >> currword)`:不断读取输入直到结束。 5. **逻辑判断**: - `if (currword == preword)`:检查当前单词是否与前一个单词相同。 6. **输出结果**: - 根据 `maxcnt` 的值决定输出内容。 #### 总结 通过以上分析,我们可以看到这个程序是如何有效地解决题目所提出的问题的。在实际编程过程中,这种类型的练习能够帮助程序员更好地理解C++的基本语法和流程控制,并且有助于提高解决问题的能力。同时,这也是学习C++语言的一个很好的例子,展示了如何利用基本的数据类型和控制结构来实现功能强大的程序。
#include "iostream"
#include "vector"
#include "string"
using namespace std;
int main()
{
string currword,preword;
string repword;
int currcnt=0;
int maxcnt=1;
while(cin >> currword)
{
if(currword==preword)
{
++currcnt;
if(currcnt>maxcnt)
{
maxcnt=currcnt;
repword=preword;
}
}
else
{
if(currcnt>maxcnt)
- 粉丝: 9
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助