3

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

我想说

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

有没有办法在不输入 value != 0 && value != 1 ...等的情况下说这个?此外,如果这存在并且是可能的,并且它在 java 中的不同,我也会发现这很有帮助。

谢谢你们总是乐于助人。

4

6 回答 6

8

C++:

#include <cctype>
using namespace std;
...
if (!isdigit(str[i]))

// or

if (str[i] < '0' || str[i] > '9')

爪哇:

if (!Character.isDigit(str.charAt(i)))
于 2012-10-26T02:37:21.413 回答
1

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

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

于 2012-10-26T02:36:58.893 回答
0

使用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;
}
于 2012-10-26T04:32:35.540 回答
0

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

!boost::empty(boost::find<boost::return_found_end>("0123456789", string.at(i)))
于 2012-10-26T02:44:02.070 回答
0

如果字符串是“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;
    }
}
于 2012-10-26T02:49:29.617 回答
0

对于 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();
}
于 2012-10-26T02:56:59.810 回答