Заменить пунктуацию в строке C ++ - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь понять, почему binary_search () не находит определенные символы путаницы, а find () делает:

array<char, 25> punctuation_chars{'\'', '\"', ',', '.', ';', ':', '+', '*', '-', '_', '?', '!', '=', '|', '^', '/', '\\', '(', ')', '[', ']', '{', '}', '<', '>'};

bool is_punctuation(char c)
{
    auto ret = find(cbegin(punctuation_chars), cend(punctuation_chars), c) != cend(punctuation_chars);
    // auto ret = binary_search(cbegin(punctuation_chars), cend(punctuation_chars), c);
    if (c == ',')
        cout << c << " is" << (ret ? "" : " not") << " punctuation" << endl;
    return ret;
}

Комментированная строка не работает (например, для c ==',' возвращает false), а find возвращает cend (punctuation_chars) ...

1 Ответ

2 голосов
/ 18 июня 2019

punctuation_chars не отсортировано, поэтому std::binary_search не будет работать. Вам нужно позвонить std::sort:

std::sort(std::begin(punctuation_chars), std::end(punctuation_chars));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...