计算重复出现的单词和次数

题目:

从标准输入中读取若干string对象并查找连续重复出现的单词。要求记录连续重复出现的最大次数以及对应单词。
如果这样的单词存在,输出重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。

方法1:

int main()
{
	pair<string, int> max_duplicated;
	int count = 0;
	for (string str, prestr; cin >> str; prestr = str)
	{
		//若当前单词和上一个单词相同,则count自增1;否则初始化为0
		if (str == prestr)							
			++count;
		else
			count = 0;
		//找出重复次数最多的单词
		if (count > max_duplicated.second)
			max_duplicated = { prestr,count };
	}
	
	//没有重复出现的单词
	if (max_duplicated.first.empty())
		cout << "no duplicated string" << endl;
	else
	{
		//由于上一个for循环中,当来到一个新单词时,将count初始化为0,所以这边
		//重复出现的次数需要 + 1
		cout << "the word " << max_duplicated.first << " occurred "
			<< max_duplicated.second + 1 << " times" << endl;
	}
	return 0;
}

补充:
C++ std::pair的用法,
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair(如题目中要求输出 重复出现的单词和次数)。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

方法2:

int main()
{
    string pre_word, word, max_repeat_word;
    int repeat_times = 0, max_repeat_times = 0;
    
    while (cin >> word) {
        if (word == pre_word) {
            ++repeat_times;
        } else {
            repeat_times = 1;		//除了这边当来到一个新单词时,将次数重新初始化为1,其余与(方法1)类似
            pre_word = word;
        }
        
        if (max_repeat_times < repeat_times) {
            max_repeat_times = repeat_times;
            max_repeat_word = pre_word;
        }
    }
    
    if (max_repeat_times <= 1){
        cout << "no word was repeated" << endl;
    } else {
        cout << "the word '" << max_repeat_word << "' occurred " << max_repeat_times << " times" << endl;
    }
}

————————————————————————————————————————————————
————————————————————————————————————————————————
学习参考均来自这2位朋友:https://github.com/pezy/CppPrimer
https://github.com/Mooophy/Cpp-Primer

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页