#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
что используется в качестве индекса intoresultsc
, а допустимые индексы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 завершится.