Comments 11
Похоже, в условии пропущено отрицание:
if (input[i + 1] != '+' && input[i + 1] != '-' &&
(input[i + 1] >= '0' && input[i] <= '9')) // <--
return false;
!(input[i + 1] >= '0' && input[i+1] <= '9')
обзоры кода
Только с третьего раза понял о чём речь. И вроде перевод полностью корректный, но осознал, что так вообще никто вокруг меня не говорит
PVS-Studio ловит такое?
std::size_t i = 0, j = input.length() - 1;
// Handling whitespaces
while (i < input.length() && input[i] == ' ')
i++;
while (input[j] == ' ')
j--;
if (i > j)
return false;
Честно говоря, до ревью такой код не должен доходить вообще, что это за "ненормальное программирование"? У ребят вообще стандарт кодирования был? Сколько тут цикломатическая сложность? Даже смотреть бы код не стали бы, сразу на переработку… и искать тогда ничего не надо было бы в этой лапше.
Это, безусловно, главное. Но даже если смотреть, утирая кровавые слёзы, чтоб, как попросили "найти ошибку", то их там же полно:
- цикл удаления пробелов с конца проскакивает начало строки
- dot_or_exp не ставится в true на '.'
- проверка на "last character" должна быть
i + 1 >= input.length()
- и вообще-то должна быть проверка на предпоследний символ, чтоб можно было смотреть input[i+1]
- то же самое ниже, в проверке на 'e'
- 1e+ проверку пройдёт, 1e3e4,1e6figvam8, 1foo2.4 — тоже
Главное, конечно, не ошибки, а сам подход в топку.
Мне казалось "ревью кода" стало общепринятым термином. Полез в английскую версию и только так понял, что "обзор кода"="code review"
Можно ли считать ошибкой что любая каша из цифр и знаков плюс минус считается "валидным числом"?
Про строку из одних пробелов писали выше — по логике там вообще вылет будет.
Почему обзоры кода — это хорошо, но недостаточно