Как подсчитать максимальную группу согласных букв,которые встречаются подряд в слове?
написал код,который должен считать максимальную группу согласных букв,которые встречаются подряд в слове и выводить в файл,также слово должно заканчиваться точкой, но подсчеты неправильные, то есть программа считает не все согласные, подскажите пожалуйста,что нужно изменить в коде?
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char Stroka[100];
char sogl[] = "qwrtpsdfghjklzxcvbnm";
int dlin, counter = 0, maxsogl = 0;
ofstream zad("Zadanie.txt");
cout << "Введите строку:";
cin >> Stroka;
cout << "Строка, выведенная в файл:";
cout << Stroka;
zad << Stroka;
dlin = strlen(Stroka);//записали длину строки
char* p = Stroka;
for (int i = 0; i < dlin; i++) {
for (int j = 0; j < strlen(sogl); j++) {
if (Stroka[i] == sogl[j]) {
counter++;
}
else if(Stroka[i]!=sogl[j]&&counter>maxsogl) {
maxsogl = counter;
counter = 0;
}
}
}
cout << endl;
cout <<maxsogl;
zad << maxsogl;
return 0;
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
В общем буду отталкиваться от вопроса, а не от того, что написано в коде.
- Когда вы находите согласную букву (
Stroka[i] == sogl[j]) вы увеличиваетеcounter. И получается вы как бы её нашли, но зачем то продолжаете эту же букву в слове проверять с остальными согласными.
Нужно если вы нашли согласную букву, то увеличить счетчик и перестать её сравнивать с остальными согласными.else if (Stroka[i] != sogl[j] && counter > maxsogl) { maxsogl = counter; counter = 0; } - Так же вам нужно после того, как определили является ли
Stroka[i]согласной (для этого сделаем переменнуюbool isFind) сравнивать сначала сmaxsoglcounterи еслиStroka[i]не является согласной (isFind == false), то обнуляетеcounter.
Пример кода с комментариями (все что не указано я не изменял):
//Пометка, что рассматриваемый символ строки является согласной
bool isFind = false;
for (int i = 0; i < dlin; i++) {
//Изначально пусть будет гласной
isFind = false;
//Идет по списку согласных букв
//пока или не прошли по всему списку или не нашли ее в списке
for (int j = 0; j < strlen(sogl) && !isFind; j++) {
//Если мы нашли в списку согласных букв Stroka[i]
if (Stroka[i] == sogl[j]) {
//то увеличиваем counter
counter++;
//и объявляем что Stroka[i] согласная
isFind = true;
}
}
//Тут понятно
if (counter > maxsogl)
maxsogl = counter;
//Если Stroka[i] не является согласной буквой
//обнуляем counter
if (!isFind)
counter = 0;
}