The is an answer (not the only one) for exercise 5.4.1:
Write a program to read strings from standard input looking for duplicated words. The program should find places in the input where one word is followed immediately by itself. Keep track of the largest number of times a single repetion occurs and which word is repeated. Print the maximum number of duplicates, or else print a message saying that no word was repeatd. For example, if the input is
how now now now brown cow cow
the output should indicate that word now occurred three times.
(I made some changes: counts the times and show the times in the input stream)
Remark it for myself.
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<string> sVec; // record the element
vector<int> iVec; // cout the times of appeared element in the input stream.
unsigned i = 0;
string str;
cout << "Print the Ctrl-z to end it when you finish input" << endl;
while (cin >> str){
if (sVec.empty())
{
// push the first element into the sVec and the times into iVect.
sVect.push_back(str);
iVec.push_back(1);
}
else { // check the word in the input stream, appeared or not in the sVec.
for (auto e: sVec){
if (str != e) i++;
if (str == e) i = 0;
}
if (i == sVec.size()){
sVec.push_back(str); // found a new one, push it into the sVec
iVec.push_back(1); // meanwhile, record it.
i = 0;
}
}
// cout the quantities of each element in the stream
for (decltype(sVec.size()) j = 0; j != sVec.size(); ++j)
if (str == sVec[j]) iVec[j] = iVec[j] + 1;
}
for (decltype(sVec.size()) i = 0; i != sVec.size(); ++i)
cout << sVec[i] << " : " << iVec[i]-1 << '\n';
return 0;
}
that's not perfect and need more changes.. do it by yourself