是否可以使用tr1正则表达式检测字符串是否为“全数字”? 如果是的话,请帮我剪一下,因为我是regex的新手。
为什么我正在寻找tr1正则表达式,因为我不想创建一个单独的函数来检测字符串是否为数字。我希望在其余的客户端代码中内联它,但不要让它看起来很难看。我觉得也许tr1正则表达式可能有所帮助。不确定,有什么建议吗?
答案 0 :(得分:1)
如果您只想测试字符串是否包含所有数字字符,可以使用std::find_if_not
和std::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。