C++Primer习题6.12

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

     how, now now now brown cow cow
My code:
#include<iostream>
#include<string>
using namespace std;

int main()
{
    //vector<string> svec;
    string preWord = "", word, maxWord;
    int occurs = 0, maxOccurs = 0;     //若有重复,记录次数
    while(cin >> word)
    {
        //第一次输入,更新preWrod
        if(preWord == "")
        {
            preWord = word;
            occurs = 1;
            continue;
        }//如果出现重复单词,记录加1
        if(preWord == word)
        {
            ++occurs;
        }//否则如果出现不同单词则判断,如果重复次数大于已记录的最大值,则更新最大值
        else
        {
            if(maxOccurs < occurs)
            {
                maxWord = preWord;
                maxOccurs = occurs;
            }
            //更新preword,并从头开始计数
            preWord = word;
            occurs = 1;
        }
    }
    if(maxOccurs < occurs)			//注意最后一次循环容易忽略
    {
        maxWord = word;
        maxOccurs = occurs;
    }
    if(maxOccurs != 1 )
        cout << maxWord << ": " << maxOccurs << endl;
    else
        cout << "There is no repetition!" << endl;
    return 0;
}

reference answer;

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string preWord, currWord;       //当前输入的单词及前一次单词
    string repWord;                 //重复次数最多的单词
    //当前单词的重复次数及单词重复的次数最大值
    int currCnt = 0, maxCnt = 1;
    cout << "Enter some words(Ctr+Z to end): "<< endl;
    while(cin >> currWord)
    {
        if(currWord == preWord)     //当前单词重复出现
            ++currCnt;
        else //出现新单词
        {
            if(currCnt > maxCnt)//出现了重复次数更多的单词,更新4
            {
                maxCnt = currCnt;
                repWord = preWord;
            }
            currCnt = 1;
        }
        preWord = currWord;
    }
    if(currCnt > maxCnt)
    {
        maxCnt = currCnt;
        repWord = preWord;
    }
    if(maxCnt != 1)
        cout << '"' << repWord << '"' << " repeated for " << maxCnt << " times!" << endl;
    else
        cout << "There is no repeated word." << endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值