![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Доброго времени суток!
Товарищу в универе дали задачку. По сути, это простенькая БД. Вот условия: https://docs.google.com/file/d/1fm82IlH6vc1...dit?usp=sharing Надо решить на C++. Я в нем не очень силен. Основную логику переписал с примера, который был у парня. Вот код
Но есть проблемы. Не работает функция поиска (work_f). Как мне кажется проблемы с кодировкой и это проявляется в сравнениях c русскими символами в блоке switch функции work_f. Подскажите, так ли это и что нужно сделать, чтобы все заработало? Добавлено через 2 минуты и 46 секунд Забыл написать. Я эту программу писал под Linux. Может в Win будет по другому. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В Linux используется кодировка UTF-8. В ней символы кириллицы занимают два байта. Таким образом, код вида x.surname[0] == 'Д' работать будет некорректно. Чтобы этого избежать необходимо использовать wchar_t вместо char. Соответственно все функции для работы со строками будут содержать букву w в названии, например: strcmp -> wcscmp. В этом случае вместо 'Д' надо писать L'Д', а вместо "Введите фамилию" - L"Введите фамилию".
|
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Вот такая строка работает
Видимо, дело не в этом. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Ares4322, strcmp работает корректно с кодировкой UTF-8.
|
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Вы же сами написали
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Ares4322, strcmp не будет работать со строкой wchar_t *. Для этого и существует wcscmp. Чтобы сделать из строки char'ов строку wchar_t необходимо использовать mbstowcs(), а обратно wcstombs().
Добавлено через 1 минуту и 38 секунд Да, забыл написать, что особенностью кодировки UTF-8 является то, что один символ может занимать от одного байта (символы ASCII) до 4-х. Именно поэтому с ней напрямую мало кто работает. |
|||
|
||||
Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: нет Всего: 3 |
Спасибо за отклик. Товарищ сказал, что можно не использовать Кириллицу. Так что задача упрощается.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Но ведь можно же выдать отладочную информацию на экран. Посмотреть, что с чем сравнивается, и правильно ли сравнивается. Что содержится в файле test.txt, кракозябры или нормальный текст? Добавлено через 50 секунд А если препод захочет кириллицу? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |