在没有 loops/conditionals 的情况下将字符串检查为 int 错误
Checking string to int error without loops/conditionals
我正在做一个关于 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 == '[=11=]')
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 == '[=10=]'];
我正在做一个关于 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 == '[=11=]')
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 == '[=10=]'];