Задать вопрос
  • Почему strcmp неправильно сравнивает кириллицу?

    @res2001
    Developer, ex-admin
    Все просто (сложно) - кодировка введенных символов не совпадает с кодировкой исходников программы.
    Вы видимо пишите консольную программу под виндой - тут это типичная проблема для новичков, т.к. в русской винде в консоли возможны 2 стандартные кодировки cp1251 и cp866, причем по умолчанию используется cp866 (по умолчанию - это когда вы просто запустите cmd.exe). Проверить текущую установленную кодировку консоли из самой консоли можно командой chcp, ею же можно и изменить кодировку.
    Кодировка исходников может быть вооще какой угодно, кроме вас ее никто не знает.

    Для простоты, чтобы у вас заработала программа перекодируйте исходники в cp866 и пересоберите ее.
    Но это будет работать лишь до той поры пока вы запускаете программу на русской винде и пока кодировка консоли в ней cp866.

    Нормальный подход в этом случае:
    1. писать исходники в UTF8,
    2. узнать текущую кодировку консоли,
    3. перед выводом любого текста перекодировать текст из UTF8 в кодировку консоли,
    4. при вводе текста с консоли перекодировать из кодировки консоли в UTF8, и только после этого с текстом можно совершать какие-то действия, например strcmp().
    5. в коде для хранения строк использовать wchar_t и wstring, а не char и string.
    Ответ написан
    1 комментарий