Суть задания состоит в том, что есть строка, и нужно вывести её, но слова в которых содержатся более 3х одинаковых букв вывести их '!'. причём допустим может быть 4 одинаковых буквы в этом слове и должно вывести "!!!!". Например срока: abc abb aaa aaaabc должно вывести : abc abb !!! !!!!; мой код в онлайн компиляторе http://cpp.sh/93mdg
Если я все правильно понял, то вот код
#include <iostream>
#include <map>
using namespace std;
int getMaxSameLetters(string s)
{
map<char, int> freq;
for (auto symb : s) {
if (isalpha(symb)) {
++freq[symb];
}
}
int maxSameLetters = 0;
for (auto val : freq) {
maxSameLetters = max(maxSameLetters, val.second);
}
return maxSameLetters;
}
string convertString(string s, int sameLetters)
{
if (sameLetters < 3) {
return s;
}
return string(sameLetters, '!');
}
int main()
{
string text, tmp;
getline(cin, text);
for (auto symb : text) {
if (isalpha(symb)) {
tmp += symb;
} else {
cout << convertString(tmp, getMaxSameLetters(tmp)) << symb;
tmp = "";
}
}
cout << convertString(tmp, getMaxSameLetters(tmp)) << endl;
return 0;
}
это нужно делать через регулярные выражения.
Если не ошибаюсь, то вот такое: (\w)\2+
Сборка персонального компьютера от Artline: умный выбор для современных пользователей