在没有 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";
}

Live Example

这里的违规是 stoi 只需要消耗 string 的前导数字部分 而不是 确保整个字符串是 int。所以 "t3st" 会失败,因为它不是由数字引导的,但是“7est”会成功返回 7。有 确保整个 string 被消耗,但是他们都需要if检查。

一种方法是:

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