我正在使用 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/