Почему зацикливается программа на C++?

169
21 апреля 2022, 23:10

Дана строка 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;
}
Answer 1
    while ((maxs = (S.find(max2, i+1)) != -1) && ((i+1)<S.size())) {
        count++;
        i=maxs;
    }

вот этот кусок

(maxs = (S.find(max2, i+1)) != -1)

означает следующее:

  1. найти строку max2 в строке S

  2. сравнить позицию c -1

  3. присвоить maxs результат сравнения (т.е. 0 если false или 1 если true)

значит если в строке присутствует подстрока дальше 1 символа, вы постоянно будете находить эту подстроку (поиск начинается с 1 символа), получать maxs = 1

... и искать и постоянного находить эту подстроку никуда по строке не сдвигаясь

подозреваю, что правильный код должен был бы быть таким:

while (
          ((maxs = S.find(max2, i+1)) != -1) && 
          (i + 1 < S.size()
      )
READ ALSO
Проблема с виртуальными методами

Проблема с виртуальными методами

В ООП я новичокДошел до наследования

185
Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand?

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand?

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand? Другие стратегии выбора не подходят...

187
Движение игрока SFML

Движение игрока SFML

При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...

90