我想说
if(string.at(i) != 0-9){
b= true;
}
有没有办法在不输入 value != 0 && value != 1 ...等的情况下说这个?此外,如果这存在并且是可能的,并且它在 java 中的不同,我也会发现这很有帮助。
谢谢你们总是乐于助人。
我想说
if(string.at(i) != 0-9){
b= true;
}
有没有办法在不输入 value != 0 && value != 1 ...等的情况下说这个?此外,如果这存在并且是可能的,并且它在 java 中的不同,我也会发现这很有帮助。
谢谢你们总是乐于助人。
C++:
#include <cctype>
using namespace std;
...
if (!isdigit(str[i]))
// or
if (str[i] < '0' || str[i] > '9')
爪哇:
if (!Character.isDigit(str.charAt(i)))
说string[i] < 0 || string[i] > 9
。
确保您实际上是指0
(值),而不是'0'
(数字字符为零)。在后一种情况下(正如您在评论中建议的那样),您想要string[i] < '0' || string[i] > '9'
. (数字保证在任何文本编码中都是连续的和有序的,所以这适用于任何平台。)
使用ad hoc解决方案可能更容易使用已经很笨拙了,但标准库实际上直接支持这一点:
#include <locale>
#include <iostream>
#include <iomanip>
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<std::ctype<char> >(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 <string>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <ctype.h>
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;
}
您可以使用集合成员资格:
!boost::empty(boost::find<boost::return_found_end>("0123456789", string.at(i)))
如果字符串是“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;
}
}
对于 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();
}