сравнить символ с различными классами символов в c ++ - PullRequest
0 голосов
/ 04 февраля 2011

Проблема в том, что я хочу сравнить символы в строке, один за другим: для каждого из них он принадлежит алфавиту;это строчные или прописные буквы.Как я могу это сделать?

Это хорошо, что если я хочу сравнить это как (+ - * ^), как будто нет стандартной функции.Пожалуйста, помогите мне

Ответы [ 2 ]

5 голосов
/ 04 февраля 2011
#include <cctype>
#include <string>

...

for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
    if (std::isalpha(*i))
        handle_alphabetic_character(*i);
    else
        handle_non_alphabetic_character(*i);

РЕДАКТИРОВАТЬ для нового требования:

Чтобы найти символы в произвольном наборе символов, вы можете использовать либо str :: find () в качестве документов Джеймса Мелеллиса в своем ответе, либо просто ...

#include <cstring>

for (std::string::const_iterator i = s.begin(); i != s.end(); ++i)
    if (std::strchr("*+{\\&", *i))
        handle_matching_character(*i);
    else
        handle_non_matching_character(*i);
2 голосов
/ 04 февраля 2011

Вы можете легко использовать алгоритм std::find:

const std::string alphabet = "abcdefghijklmnopqrstuvwxyz";

bool is_in_alphabet 
           = std::find(alphabet.begin(), alphabet.end(), 'c') != alphabet.end();

В качестве альтернативы, вы можете использовать std::binary_search, если символы алфавита отсортированы, но если у вас нет большого количества символов в алфавите (то есть, намного больше, чем 26), линейный поиск, вероятно, будет намного быстрее. Символы маленькие и быстрые для сравнения.

...