Консоль зависает при выполнении
#include <iostream>
#include <string>
using namespace std;
int main(){
char str[20]="0000011100111100011";
int n = strlen(str);
int count = 0;
int max = 0;
for (int i = 0; i < n; i++) {
while (str[i] == str[i + 1]) {
count++;
}
if (count > max) {
max = count;
}
}
cout << max;
return 0;
}
суть задания: Дана строка, состоящая из групп нулей и единиц. Подсчитать количество символов в самой длинной группе.
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
вам надо while поменять на if.
#include <iostream>
#include <string>
using namespace std;
int main(){
char str[20]="0000011100111100011";
int len = strlen(str);
int count = 0;
int max = 0;
int n = str[0];
for (int i = 0; i < len; i++){
if (n != str[i]){
if (count > max) max = count;
count = 0;
n = str[i];
}
count++;
}
cout << max;
return 0;
}
пример с использованием цикла while
#include <iostream>
#include <string>
using namespace std;
int main(){
char str[20]="0000011100111100011";
int len = strlen(str);
int count = 0;
int max = 0;
int n = str[0];
for (int i = 0; i < len; i++) {
while (n == str[i]) {
count++;
i++;
}
if (count > max) {
max = count;
}
count = 0;
n = str[i];
}
cout << max;
return 0;
}
Автор решения: n1tr0xs
→ Ссылка
Ваша ключевая ошибка здесь:
while (str[i] == str[i + 1]) {
count++;
}
В этом цикле вы не изменяете i, из-за чего программа входит в бесконечный цикл.
Вы можете сделать это так (минимальные изменения в вашем коде):
int main(){
char str[20]="0000011100111100011";
int n = strlen(str);
int count = 1; // начальную длину установим в 1
int max = 0;
for (int i = 0; i < n; i++) {
while (str[i] == str[i + 1]) {
count++;
++i; // Вот здесь мы увеличим i
}
if (count > max) {
max = count;
}
count = 1; // "Обнулим" длину для новой последовательности
}
cout << max;
return 0;
}
Или можно так (более оптимально):
int main(){
string str = "0000011100111100011";
int n = str.length();
int i = -1;
int maximum = 1;
while(++i < n){
int counter = 1;
while (str[i] == str[++i])
++counter;
if (counter > maximum)
maximum = counter;
}
cout << maximum;
return 0;
}