How to say!= 0-9 in c ++

可能重复:
如何检查给定的c ++字符串或char *是否只包含数字?

我想说的

if(string.at(i) != 0-9){ b= true; } 

有没有办法说这个没有输入值!= 0 && value!= 1 …等? 此外,如果这存在并且是可能的,并且它在java中的不同我也会觉得有帮助。

谢谢你们总是乐于助人。

C ++:

 #include  using namespace std; ... if (!isdigit(str[i])) // or if (str[i] < '0' || str[i] > '9') 

Java的:

 if (!Character.isDigit(str.charAt(i))) 

比如string[i] < 0 || string[i] > 9 string[i] < 0 || string[i] > 9

确保你实际上意味着0 (值),而不是'0' (数字的字符为零)。 在后一种情况下(正如您在评论中所建议的那样),您需要string[i] < '0' || string[i] > '9' string[i] < '0' || string[i] > '9' 。 (数字保证是连续的,并以任何文本编码排序,因此这适用于任何平台。)

如果字符串是“0983”我希望它是真的但如果它是“124Test”我希望它保持为假。

这样说,一种方法是检查字符是否不是数字,然后返回false,而不是检查每个字符直到字符串的结尾。

 bool b = true; for(int i = 0; i < string.size(); i++) { if(string.at(i) < '0' || string.at(i) > '9') { b = false; break; } } 

您可以使用集合成员资格:

 !boost::empty(boost::find("0123456789", string.at(i))) 

对于C ++的答案,看看这个已经解决了类似问题的问题,你可以很容易地适应你的情况。

至于Java,你可以这样做:

 public boolean isInteger(String s) { return s.matches("^[0-9]+$"); } 

您可以修改正则表达式以满足您的要求。 例如: "^[4-8]+$"

注意String.matches不是最佳的。 如果需要经常执行检查,请使用编译模式:

 static final Pattern DIGITS = Pattern.compile("^[0-9]+$"); public void isInteger(String s) { return DIGITS.matcher(s).find(); } 

使用临时解决方案可能更容易使用它是笨拙的,但标准库实际上直接支持这个:

 #include  #include  #include  int main() { char *inputs[] = { "0983", "124test" }; std::locale loc(std::locale::classic()); std::ctype_base::mask m = std::ctype_base::digit; for (int i=0; i<2; i++) { char const *b = inputs[i]; char const *e = b + strlen(b); std::cout << "Input: " << std::setw(10) << inputs[i] << ":\t"; if (std::use_facet >(loc).scan_not(m, b, e) == e) std::cout << "All Digits\n"; else std::cout << "Non digit\n"; } return 0; } 

如果你正在使用C ++ 11, std::all_of几乎肯定更容易使用:

 #include  #include  #include  #include  #include  int main() { std::string inputs[] = { "0983", "124test" }; std::cout << std::boolalpha; for (int i=0; i<2; i++) std::cout << std::setw(10) << inputs[i] << "\tAll digits?: " << std::all_of(inputs[i].begin(), inputs[i].end(), ::isdigit) << "\n"; return 0; }