Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод кирилицы в нижний регистр C++, без STL библиотек 
:(
    Опции темы
TupDub
Дата 1.2.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Привет! 

Пытаюсь сделать преобразование строки на русском родном языке в нижний регистр, без помощи STL библиотеки - 
ничего не помогает. 

Вот код:
Код


char *str = "Рыба";
    if(((unsigned char)str[1] >= 144) && ((unsigned char)str[1] <= 175))
    {
        printf("ZAGL %s \n", str);
        str[1] = (char)((unsigned char)str[1] - 32 - 256);
    }
    printf("Cyr %s \n", str);

но почему-то не получается... в лучше случае он выводит вместо заглвной буквы Р букву Ё! 
Ёлки - палки... Люди, сижу с этим весь день... как это делать правильно ? 
Пытался также воспользоваться стандартными функциями типа tolower но они работаю только для латинского алфавита, а для кирилицы не работают! Установка локали не помогла... 


PM   Вверх
Alca
Дата 1.2.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



CharLower

Добавлено через 25 секунд
Если винда


--------------------
PM WWW ICQ Skype Jabber   Вверх
TupDub
Дата 1.2.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



у меня не винда, убунта... чистый Си... без посторонних библиотек
PM   Вверх
zim22
Дата 1.2.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(TupDub @  1.2.2010,  15:56 Найти цитируемый пост)
преобразование строки на русском родном языке в нижний регистр,

tolower
Цитата(TupDub @  1.2.2010,  15:56 Найти цитируемый пост)
функциями типа tolower но они работаю только для латинского алфавита, а для кирилицы не работают

работают они для кириллицы
тыц

Это сообщение отредактировал(а) zim22 - 1.2.2010, 18:08


--------------------
PM MAIL   Вверх
bsa
Дата 1.2.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



TupDub, думаю, тебе нужно использовать towlower() совместно с setlocale().
PM   Вверх
Alca
Дата 1.2.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Цитата

Установка локали не помогла... 

Покажи как ты пытался


--------------------
PM WWW ICQ Skype Jabber   Вверх
TupDub
Дата 2.2.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



bsa, да ... я пытаюсь!
я пробую так:
Код

setlocale(LC_ALL,"ru_RU.UTF-8");
    char *str = "Рыба";
    tolower(str[1]);
    printf(" %s \n", str);

но так не переводит ничего... не работает. Как правильно установить локаль?
Вот так делаю, показывает правильно локаль:
Код

    printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) );


Это сообщение отредактировал(а) TupDub - 2.2.2010, 13:56
PM   Вверх
Alca
Дата 2.2.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



а так?
Код

setlocale(LC_ALL,NULL);


Добавлено через 3 минуты и 32 секунды
http://www.cplusplus.com/reference/clibrar...cale/setlocale/
Цитата

The function can also be used to retrieve the current locale's name by passing NULL as the value for locale.


Это сообщение отредактировал(а) Alca - 2.2.2010, 13:50


--------------------
PM WWW ICQ Skype Jabber   Вверх
TupDub
Дата 2.2.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Alca, Вот так делаю, показывает правильно локаль:код C++
    printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) );

PM   Вверх
artsb
Дата 2.2.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(TupDub @  2.2.2010,  13:37 Найти цитируемый пост)
я пробую так:

Может как писал bsa:
Код

towlower(str[1]);



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
bsa
Дата 2.2.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



TupDub, ты разницу между tolower() и towlower() заметить можешь?
А пытаться использовать tolower() для кириллицы сущий бред, так как кириллические символы в UTF-8 двухбайтные, а tolower() работает только с символами, значения которых находятся в пределах char + EOF!
PM   Вверх
xvr
Дата 2.2.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Код

setlocale(LC_ALL,"ru_RU.UTF-8");
Сдается мне, что не UTF8 у тебя кодировка исходника. 
Далее, вот это неправильно
Код

    char *str = "Рыба";
    tolower(str[1]);
должно быть так
Код

    char str[] = "Рыба";
    str[0]=tolower(str[0]);


PM MAIL   Вверх
Alca
Дата 2.2.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Код

    setlocale(LC_ALL, "");
    char str[] = "Рыба";
    str[0]=tolower(str[0]);

у меня работает


--------------------
PM WWW ICQ Skype Jabber   Вверх
artsb
Дата 2.2.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



У меня вот так работает:
Код

setlocale(LC_ALL,"Russian");     // ru_RU.UTF-8
wchar_t *str = L"Рыбка";
std::wcout << str << std::endl;
str[0] = towlower(str[0]);
std::wcout << str;



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
bsa
Дата 2.2.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Alca @  2.2.2010,  14:17 Найти цитируемый пост)
у меня работает 
У тебя Windows, в котором по умолчанию CP1251. Выстави в настройках Языка (панель управления) текущий язык Английский. И посмотри что будет с твоей программой.

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.