Marcenary
@Marcenary

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

Есть функция которая изменяет поле структуры сравнивая введённое имя поля с теми что есть. С английским работает нормально, но вот с русским не хочет, одно и то же слово он считает не одинаковым. Например введённое "имя" сравнивая с "имя" прописанное в программе strcmp выдает что введённое на 1 больше, хотя это одно и тоже слово. И эта проблема в проекте как я заметил, в другом проекте всё сравнивается правильно.
  • Вопрос задан
  • 473 просмотра
Решения вопроса 1
@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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы