Дана строка S. Вывести символ L, который встречается наибольшее число раз. И количество этих символов (N). Если есть несколько символов с одинаковым количеством, вывести ПЕРВЫЙ из них.
int max1=0, count=1, m, maxs;
string L, max2, S;
int i;
getline(cin,S);
for ( i = 0; i < S.size(); i++) {
max2 = S[i];
m = i;
while ((maxs = (S.find(max2, i+1)) != -1) && ((i+1)<S.size())) {
count++;
i=maxs;
}
if (count > max1) {
L = max2;
max1 = count;
}
i = m;
count = 1;
}
cout << L << max1;
}
while ((maxs = (S.find(max2, i+1)) != -1) && ((i+1)<S.size())) {
count++;
i=maxs;
}
вот этот кусок
(maxs = (S.find(max2, i+1)) != -1)
означает следующее:
найти строку max2 в строке S
сравнить позицию c -1
присвоить maxs результат сравнения (т.е. 0 если false или 1 если true)
значит если в строке присутствует подстрока дальше 1 символа, вы постоянно будете находить эту подстроку (поиск начинается с 1 символа), получать maxs = 1
... и искать и постоянного находить эту подстроку никуда по строке не сдвигаясь
подозреваю, что правильный код должен был бы быть таким:
while (
((maxs = S.find(max2, i+1)) != -1) &&
(i + 1 < S.size()
)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей