编写一个小程序,从标准输入读入一系列 string 对象,
寻找连续重复出现的单词。程序应该找出满足以下条件的
单词的输入位置:该单词的后面紧跟着再次出现自己本
身。跟踪重复次数最多的单词及其重复次数。输出重复次
数的最大值,若没有单词重复则输出说明信息。例如,如
果输入是:
how, now now now brown cow cow
则输出应表明“now”这个单词出现了三次。
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string s;
vector<string> str;
cout << "请输入(ctrl+z结束):" <<endl;
while(cin >> s){
str.push_back(s);
}
if(str.empty())
{
cout << "木有单词" << endl;
return 0;
}
int couter[100];//100个备用计数器
fill(couter, couter+100, 1);//全部初始化为1,因为单词第一次出现没有比较,不再下边循环的计数之内
int i = 0;
for(vector<string>::iterator iter = str.begin(); (iter+1) != str.end();){
if(*iter == *iter++)
couter[i]++;
else
couter[i++];
}
sort(couter, couter + i + 1);
cout << "最多为" << couter[i] << "个相同单词" <<endl;
return 0;
}
虽然说也可以得出最后的结果,但是用了分配太多空间,时间复杂度也太高,还留下了一个固定大小的数组。。然后看了别人家的代码,感觉很羞愧QAQ。。
传送门http://blog.youkuaiyun.com/lu597203933/article/details/11058479