Как проверить строку для специальных символов?

Я работаю над проблемой в C++, и вот мой вопрос: я получаю строку от объекта и хочу определить, есть ли символ, который не является буквенно-цифровым или специальным символом, таким как /, (, $ и так далее. Я не могу представить другого пути, кроме как спрашивать

if (Text.Pos("A") > 0)

if (Text.Pos("B") > 0)

.....

Есть ли стандартный способ / способ сделать это быстрее?

1 ответ

Я предполагаю, что ваше предлагаемое решение состоит в том, чтобы проверить, все ли буквенно-цифровые символы находятся внутри строки. Этот метод не будет работать, потому что вы также должны учитывать длину строки, потому что можно получить строку, которая содержит все буквенно-цифровые символы плюс один специальный символ.

Если не считать вложения тысяч операторов if для обнаружения не алфавитно-цифровых символов, это решение работает:

(Я предполагаю, что Text может быть повторен, используя циклы for на основе диапазона)

Ты можешь использовать std::find_if

#include <algorithm>
#include <iterator>
#include <cctype>
#include <iostream>

auto it = std::find_if(std::begin(Text), std::end(Text), [](const char c) {
    return std::isalnum(c) == 0; // Not alphanumeric
});

if (it == std::end(Text)) {
    std::cout << "Text is fine!";

} else {
    std::cout << "Text contains non-alphanumeric character: '" << *it << "'";
}

std::cout << std::endl;
Другие вопросы по тегам