C++ Primer 6.12习题答案改正

题目:
编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足以下条件的单词的输入位置:该单词的后面紧跟着再次出现自己本身,
跟 踪重复次数量多的单词及其重复次数.输出重复次数的最大值,
例如.如果输入是:

how now now now brown cow cow

则输出表明now这个单词出现了三次

给出的答案程序如下:

<pre name="code" class="cpp">//6.12.cpp
//从标准输入读取一系列string对象,寻找连续重复出现的单词
//输出重复次数最多的单词及重复次数;若没有单词重复则输出说明信息
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string curWord,preWord=" ";//当前输入的单词及前一单词
	string repWord;//重复次数最多的单词
	int curCnt=0,maxCnt=1;//当前单词的重复次数及单词重复次数最大值
	cout<<"Enter some words(Ctrl+Z to end):"<<endl;
	while(cin>>curWord)
	{
		if(curWord==preWord)//当前单词是前一单词的重复出现
			++curCnt;
		else     //当前单词不是前一单词的重复出现
		{
			if(curCnt>maxCnt) //出现了重复次数更多的单词
			{
					maxCnt=curCnt;
					repWord=preWord;
			}
			curCnt=1;//把第一次出现的单词重复次数置为1
		}
		preWord=curWord;
	}
	if(maxCnt!=1)//有重复单词出现
		cout<<'\"'<<repWord<<'\"'<<" repteaded for "
			    <<maxCnt<<"times."<<endl;
	else
		cout<<"There is no repeated word."<<endl;
	return 0;
}

 
结果如下:
<img src="https://img-blog.csdn.net/20141208184628349?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRmx5aW5nQmlyZF9TWEY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
很明显,结果不正确,这是为什么呢?

原来,上面的程序跳出while循环时只计算了最后一个单词的重复次数,却不能把它与之前的单词比较,如果最后一个单词重复次数超过前面的,则不能统计。所以,我加了一个判断语句if:

//6.12.cpp
//从标准输入读取一系列string对象,寻找连续重复出现的单词
//输出重复次数最多的单词及重复次数;若没有单词重复则输出说明信息
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string curWord,preWord=" ";//当前输入的单词及前一单词
	string repWord;//重复次数最多的单词
	int curCnt=0,maxCnt=1;//当前单词的重复次数及单词重复次数最大值
	cout<<"Enter some words(Ctrl+Z to end):"<<endl;
	while(cin>>curWord)
	{
		if(curWord==preWord)//当前单词是前一单词的重复出现
			++curCnt;
		else     //当前单词不是前一单词的重复出现
		{
			if(curCnt>maxCnt) //出现了重复次数更多的单词
			{
					maxCnt=curCnt;
					repWord=preWord;
			}
			curCnt=1;//把第一次出现的单词重复次数置为1
		}
		preWord=curWord;
	}
	//上面的程序跳出while循环时只计算了最后一个单词的重复次数,却不能把它与之前的单词比较
    //如果最后单词重复次数超过前面的,则不能统计
	<span style="color:#ff0000;">if(curCnt>maxCnt)//将最后单词的重复次数与前面单词比较
	{
			repWord=curWord;
			maxCnt=curCnt;
	}</span>
	if(maxCnt!=1)//有重复单词出现
		cout<<'\"'<<repWord<<'\"'<<" repteaded for "
			    <<maxCnt<<"times."<<endl;
	else
		cout<<"There is no repeated word."<<endl;
	return 0;
}


	else
		cout<<"There is no repeated word."<<endl;
	return 0;
}
结果如下:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值