Проверка строки на ошибку int без циклов / условных выражений

Я делаю проблему на HR и не могу понять, как проверить на наличие ошибок без использования условных операторов. Как это делается в C ++?

// if string is int output it, else output "Bad string"// need to do this without any loops/conditionals
int main(){
string S;
char *end;
long x;
cin >> S;
const char *cstr = S.c_str();
x = strtol(cstr,&end,10);

if (*end == '\0')
cout << x;
else
cout << "Bad string";

return 0;
}

Должен ли я использовать что-то кроме strtol?

1

Решение

stoi это действительно то, что вы хотите использовать.

Учитывая вклад в string S Один из возможных способов справиться с этим:

try {
cout << stoi(S) << " is a number\n";
} catch(const invalid_argument& /*e*/) {
cout << S << " is not a number\n";
}

Живой пример

Нарушение здесь в том, что stoi требуется только для вычисления главной числовой части string не убедитесь, что вся строка int, Таким образом, «t3st» потерпит неудачу, потому что он не возглавляется числом, но «7est» удастся вернуть 7. Есть несколько способов чтобы убедиться, что весь string потребляется, но все они требуют if-проверять.

1

Другие решения

Одним из способов будет:

char const *m[2] = { "Bad string", S.c_str() };
cout << m[*end == '\0'];
0

По вопросам рекламы [email protected]