C++ Primer 6.12习题答案改正

来源:互联网 发布:淘宝食品没有证怎么开 编辑:程序博客网 时间:2024/06/12 18:45
题目:
编写一个小程序,从标准输入读入一系列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;elsecout<<"There is no repeated word."<<endl;return 0;}

结果如下:<img src="http://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;elsecout<<"There is no repeated word."<<endl;return 0;}elsecout<<"There is no repeated word."<<endl;return 0;}
结果如下:




0 0