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

#c

#c

Вопрос:

«R3 2-1R2 1-1R2 0-2» — это мой ввод, я пытаюсь вычислить общее количество положительных тестов (значение после знака ) во вводимой строке. Я думаю, что функция может входить в бесконечный цикл, но я не уверен, почему…

 int posiTests(string results)
{
    
//concatenator
    
    string resultsc;
    
    for (size_t i = 0; i != results.size(); i  )
    {
        if (results[i] != ' ')
        {
            resultsc  = results[i];
        }
    }
    
//positive tests R3 2-1R2 1-1R2 0-2
    
    int j = 1;
    string postests;
    
    while (j <= resultsc.size())
    {
        
        if (isdigit(resultsc[j]))
        {
            j  ;
        }
        else if (resultsc[j] == ' ')
        {
            while (resultsc[j] != '-')
            {
                if (isdigit(resultsc[j]))
                {
                    postests  = resultsc[j];
                }
                else
                {
                    j  ;
                }
            }
        }
    }
    
    cout << postests;
    
    int value = stoi(postests);
    
    return value;
    
}
 

Комментарии:

1. while (resultsc[j] != '-') может быть бесконечный цикл, потому j что не обновляется, когда isdigit(resultsc[j]) имеет значение true.

2. Будущая ошибка: while (j <= resultsc.size()) позволит j равняться resultsc.size() . Это фатально, потому j что используется в качестве индекса into resultsc , а допустимые индексы resultsc от 0 до resultsc.size() - 1 .

Ответ №1:

Здесь я немного изменил внутренние циклы, чтобы убедиться j , что они правильно увеличиваются.

     for (size_t j = 0; j < resultsc.size();   j)
    {
        if (resultsc[j] != ' ')
        {
            continue;
        }

        while (j < resultsc.size() amp;amp; resultsc[j] != '-')
        {
            if (isdigit(resultsc[j]))
            {
                postests  = resultsc[j];
            }
            j  ;
        }
    }
 

Для вашего данного примера это выведет «210». Если вместо этого вы хотели «3» (2 1 0 ), вам нужно будет вызвать stoi(postests) , когда цикл while завершится.