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

标签 c++ string

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

    string temp(STR_SIZE, ' ');
    string str_num(STR_SIZE, ' ');
    ...
    getline(cin, temp, '\n');

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

    str_num.assign(temp, 0, next_white_space(0));

我已经证实这很好用。我的解决方案的下一步是将 str_num 转换为 int(这部分也可以正常工作),但我应该检查以确保 str_num 中的每个字符都是数字。这是我尝试过的最好的方法:

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

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

谢谢。

最佳答案

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

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

注意:因为此函数来自 C,所以在采用 int 的方法中体现了将字符视为整数的旧风格。但是,chars 可以提升为 int 值,因此 char 变成 int 就好了,这行得通。

关于C++:使用 isdigit 检查字符串字符是否为数字。 .,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399522/

相关文章:

c++ - 甚至未被引用的类方法的未解析外部符号

php - 将 lang 函数放入 php 字符串中

java - 如何设置输出流 Java

c - 如何正确排序 C 中的字符串?

c++ - 使用一个对象线程中的 const 方法是否安全?

c++ - 使用 C/C++ 获取错误消息 MSB6006 错误代码 2

c++ - CImg 的编译错误

javascript - 拆分前两个空格的字符串

java - 删除字符串中的前括号和尾括号

c++ - 使用包含托管类的/CLR 标志构建的 native dll