Я пытаюсь понять, почему 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) ...