Я делаю проблему на 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?
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
-проверять.
Одним из способов будет:
char const *m[2] = { "Bad string", S.c_str() };
cout << m[*end == '\0'];