Почему функция возвращает такое странное значение?

Вообщем я прошел треть начального учебника по c++ и решаю различные простые задачки, создаю функцию, которая считает наибольшее кол-во подряд идущих нулей в строке. Вот код:
#include <iostream>
using namespace std;

int nullcount(char *str);

int main()
{
    int c;
    char str[] = "0001001100000011";
    c = nullcount(str);
    cout << c;
}

int nullcount(char *str)
{
    int a=0;
    for(int i = 0; str[i]; i++)
    {
        if (str[i] == '0')
        {
            int a1;
            for (int i1 = i; str[i1] == '0'; i1++)
            {
                a1++;
            }
            if (a1 > a)
            {
                a = a1;
                a1 = 0;
            }
        }
    }
    return a;
}

Функция упорно возвращает значение 32770, где я ошибся?
  • Вопрос задан
  • 2368 просмотров
Пригласить эксперта
Ответы на вопрос 4
@mottoper Автор вопроса
Опа, уже разобрался, надо было при объявлении задать переменной a1 значение 0. Как вопрос то удалить? Вот я идиот, полчаса думал, как только запостил, то сразу догадался.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А в чем смысл внутреннего цикла? Вы же получается считаете на каждой итерации заново, просто на один элемент меньше...

В любом случае виной всему условия выхода из цикла.
Ответ написан
@RPG
Чтобы больше не натыкаться на такие ошибки, используйте анализатор cppcheck, он сразу выдаст предупреждение:
[test.cpp:25]: (error) Uninitialized variable: a1
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Вот вам ещё вариант:

#include <string.h>
int nullcount(const char* str)
{
    int count = 0;
    while (*str) {
        int cur = strspn(str, "0");
        if (cur > count)
            count = cur;
        str += cur + strcspn(str + cur, "0");
    }
    return count;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы