【问题标题】:C++: Checking whether a string character is a digit using isdigit. .C++:使用 isdigit 检查字符串字符是否为数字。 .
【发布时间】:2012-09-13 04:42:16
【问题描述】:

我正在使用 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[] 来处理字符串对象,它似乎工作得很好。但是,在这里,它完全把我搞砸了。

谢谢。

【问题讨论】:

  • 你试过摆脱- '0'吗?

标签: c++ string


【解决方案1】:

std::isdigit 接受一个 char 的整数值并检查它。

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

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

【讨论】:

  • 谢谢。我使用来自cplusplus 的引用,它显示参数为int c。现在效果很好。
  • 不过,如果我停下来想一想,我会注意到它与 isalpha() 的相似之处,而不会犯这么简单的错误。
猜你喜欢
  • 2018-02-22
  • 2017-11-28
  • 1970-01-01
  • 2021-12-30
  • 2011-02-24
  • 2012-06-27
  • 1970-01-01
相关资源
最近更新 更多