Оператор while

Задания раздела 5.4.1
5.14. Напишите программу для чтения срок со стандартного устройства ввода и поиска совпадающих слов. Программа должна находить во вводе места, где одно слово непосредственно сопровождается таким же. Отследите наибольшее количество повторений и повторяемое слово. Отобразите максимальное количество дубликатов или сообщение, что никаких повторений не было. Например, при вводе how now now now brown cow cow вывод должен указать, что слово now встретилось три раза.

5.4.1

Цикл while полезен, когда нужно поработать с управляющей переменной после  выполнения цикла. Ничего интересного больше в теме нет. Хотя задание достаточно веселое. Мне очень стыдно за то, что я не смог написать простейшую программу, которую требуют в задании, за 5 минут. Но попытки не потрачены впустую.

#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string s;
std::vector<std::string> v;
while (std::cin >> s) {
v.push_back(s); /* читаю строки записываю в вектор. каждый элемент вектора - отдельное слово */
}
auto it=v.begin(); // итератор it установлен на первый элемент вектора
int cnt=0; std::string currs; int currcnt=0;
while (it!=(v.end()-1)) { // пока не последний элемент вектора
if(*it==*(it+1)) {++cnt; } else cnt=0; /* если текущее значение совпадает с последующим, увеличиваю счетчик на 1, если же значения разные, счетчик обнуляется */
if(cnt>currcnt) {currcnt=cnt; currs=*it;} /* если накрученный совпадениями счетчик превышает текущее значение счетчика, значит надо бы запомнить это значение и значение элемента вектора, которое дало такую накрутку */
++it;
}
if (currcnt==0) std::cout << "No matches"; else std::cout << currcnt+1 << " "<< currs; /* выводить значение счетчика нужно, учитывая первый элемент совпадения. просто добавлю 1 */
return(0);
}

Добавить комментарий