Поиск, является ли строка «только числовой», используя регулярное выражение tr1 - PullRequest
2 голосов
/ 12 декабря 2011

Могу ли я определить, является ли строка «полностью числовой» или не использует tr1 регулярное выражение? Если да, пожалуйста, помогите мне с отрубленным, так как я новичок в регулярных выражениях.

Почему я ищу tr1 regex для чего-то подобного, потому что я не хочу создавать отдельную функцию для определения, является ли строка числовой. Я хочу сделать это встроенным в остальной части клиентского кода, но не хочу, чтобы он также выглядел уродливо. Я чувствую, что, возможно, TR1 регулярное выражение может помочь. Не уверен, какие-нибудь советы по этому поводу?

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

Если вы просто хотите проверить, содержит ли строка все числовые символы, вы можете использовать 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 голос
/ 12 декабря 2011

Вы можете использовать функцию-член string::find_first_not_of для проверки числовых символов.

if (mystring.find_first_not_of("0123456789") == std::string::npos)
{
    std::cout << "numeric only!";
}
0 голосов
/ 12 декабря 2011

Регулярное выражение для этого довольно тривиально.Просто попробуйте сопоставить "\\D".Это будет соответствовать любому символу, который не является цифрой.Если вы хотите, чтобы он также включал десятичный разделитель, вы можете использовать "[^\\d\\.]", что означает «не цифра или точка».

Однако, как насчет простого использования strtol() для чтения числа??Вы сможете получить указатель на первый нечисловой символ.Так что, если это указывает на конец строки, это было хорошо.Плюс здесь в том, что для этого вам даже не понадобится TR1.

...