C++:使用isdigit检查字符串字符是否为数字..

And*_*son 0 c++ string

我正在使用getline在循环中读取我的程序的输入.

    string temp(STR_SIZE, ' ');
    string str_num(STR_SIZE, ' ');
    ...
    getline(cin, temp, '\n');
Run Code Online (Sandbox Code Playgroud)

之后,我使用一个函数来查找下一个分隔符(空格)并将空格前的所有字符分配给str_num.看起来像这样:

    str_num.assign(temp, 0, next_white_space(0));
Run Code Online (Sandbox Code Playgroud)

我已经证实这很有效.我的解决方案的下一步是将str_num转换为int(这部分也很好),但我应该检查以确保str_num中的每个字符都是一个数字.这是我尝试过的最好的东西:

    if(!isdigit(str_num[0] - '0')) {
        cout << "Error: Not an appropriate value\n";
        break; /* Leave control structure */
    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它始终打印错误消息并退出结构.这是为什么?我之前使用了operator []作为字符串对象,它似乎运行良好.但是,在这里,它完全搞砸了我.

谢谢.

Jon*_*eng 7

std::isdigit 获取char的整数值并检查它.

因此,删除 - '0'并将str_num [index]传递给isdigit().

注意:因为这个函数来自C,所以将字符作为整数处理的旧样式在采用int的方法中显示出来.但是,chars可以提升为int值,所以char变成了一个int就好了,这样可行.