![]() |
|
Модераторы: bsa |
![]()
|
|
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Привет!
Пытаюсь сделать преобразование строки на русском родном языке в нижний регистр, без помощи STL библиотеки - ничего не помогает. Вот код:
но почему-то не получается... в лучше случае он выводит вместо заглвной буквы Р букву Ё! Ёлки - палки... Люди, сижу с этим весь день... как это делать правильно ? Пытался также воспользоваться стандартными функциями типа tolower но они работаю только для латинского алфавита, а для кирилицы не работают! Установка локали не помогла... |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
||||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
у меня не винда, убунта... чистый Си... без посторонних библиотек
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
tolower
работают они для кириллицы тыц Это сообщение отредактировал(а) zim22 - 1.2.2010, 18:08 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
TupDub, думаю, тебе нужно использовать towlower() совместно с setlocale().
|
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
Покажи как ты пытался |
|||
|
||||
| TupDub |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
bsa, да ... я пытаюсь!
я пробую так:
но так не переводит ничего... не работает. Как правильно установить локаль? Вот так делаю, показывает правильно локаль:
Это сообщение отредактировал(а) TupDub - 2.2.2010, 13:56 |
||||
|
|||||
| Alca |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
а так?
Добавлено через 3 минуты и 32 секунды http://www.cplusplus.com/reference/clibrar...cale/setlocale/
Это сообщение отредактировал(а) Alca - 2.2.2010, 13:50 |
||||
|
|||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Alca, Вот так делаю, показывает правильно локаль:код C++
printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) ); |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
TupDub, ты разницу между tolower() и towlower() заметить можешь?
А пытаться использовать tolower() для кириллицы сущий бред, так как кириллические символы в UTF-8 двухбайтные, а tolower() работает только с символами, значения которых находятся в пределах char + EOF! |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Далее, вот это неправильно
|
||||||
|
|||||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
у меня работает |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
У меня вот так работает:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
У тебя Windows, в котором по умолчанию CP1251. Выстави в настройках Языка (панель управления) текущий язык Английский. И посмотри что будет с твоей программой.
|
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 2 Всего: 50 |
bsa, ok
Добавлено через 3 минуты и 43 секунды А если текущий язык украинский? Добавлено через 4 минуты и 8 секунд Для каждого языка свою локаль задавать? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Если используешь wchar_t, то проблемы могут возникнуть только с редкими языками и, возможно, китайский с японским. Т.е. с теми, чьи символы не помещаются в 16 разрядов (в windows sizeof(wchar_t) == 2).
Добавлено через 58 секунд http://forum.vingrad.ru/index.php?showtopi...t&p=2086699 |
|||
|
||||
| TupDub |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
bsa,
могу конечно... У меня по-прежнему не работает этот кусок...
Народ, я пытаюсь сделать так ещё...
Но вместо буквы р получаю букву Ё. подозреваю, что там с битами что-то надо сделать... но как ??? |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
TupDub, тогда мои тебе сочувствия. Меняй стандартную библиотеку С на ту, что поддерживает C99. И не парь мозг себе попытками сделать код рабочим, так как кириллица имеет размер 2 байта в UTF-8! Сделай прикола ради printf("%d\n", sizeof(str));
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
artsb, это что было? Ты надеюсь понимаешь, что у ТС не Windows? Потому что под Windows и так есть towlower().
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
Что-то не заметил где это написано Добавлено @ 15:48 А что у него? Добавлено @ 15:49 Для Unix вроде как используется так:
Добавлено @ 15:51 Уже нашёл Добавлено @ 15:55 А у меня и с tolower работает (код выше на этой странице). Добавлено @ 15:59 А вот CharToOem скорее всего у него нет. Это сообщение отредактировал(а) artsb - 2.2.2010, 16:00 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Работает потому что у тебя кодировка однобайтная. Была бы UTF-8, как у ТС, то не работало бы.
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
Ясно. Спс. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Спасибо народ за сочувтвие ... буду биться дальше
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
TupDub, а почему вы не хотите юзать STL? tolower
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
TupDub, интересно, а почему у тебя нет towlower? в убунте он есть.
100% рабочий под Ubuntu 9.10 код:
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
а смысл от STL? всё-равно фунция tolower вызывается. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 4 Всего: 64 |
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |