使用tr1正则表达式查找字符串是否为“仅数字”

时间:2011-12-12 18:53:58

标签: c++ regex string numeric tr1

是否可以使用tr1正则表达式检测字符串是否为“全数字”? 如果是的话,请帮我剪一下,因为我是regex的新手。

为什么我正在寻找tr1正则表达式,因为我不想创建一个单独的函数来检测字符串是否为数字。我希望在其余的客户端代码中内联它,但不要让它看起来很难看。我觉得也许tr1正则表达式可能有所帮助。不确定,有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果您只想测试字符串是否包含所有数字字符,可以使用std::find_if_notstd::isdigit

std::find_if_not(s.begin(), s.end(), (int(*)(int))std::isdigit) == s.end()

如果您没有使用std::find_if_not的标准库实现,则可以轻松编写它:

template <typename ForwardIt, typename Predicate>
ForwardIt find_if_not(ForwardIt first, ForwardIt last, Predicate pred)
{
    for (; first != last; ++first)
        if (!pred(first))
            return first;

    return first;
}

答案 1 :(得分:1)

您可以使用string::find_first_not_of成员函数来测试数字字符。

if (mystring.find_first_not_of("0123456789") == std::string::npos)
{
    std::cout << "numeric only!";
}

答案 2 :(得分:0)

这个的正则表达式相当简单。只需尝试匹配"\\D"即可。这将匹配任何不是数字的字符。如果您还希望包含小数点分隔符,则可以使用"[^\\d\\.]",这将转换为“非数字或点”。

但是,如何简单地使用strtol()来读取数字呢?您将能够检索指向第一个非数字字符的指针。所以,如果这指向字符串的结尾,那就没事了。加上这边,你甚至不需要TR1。