Перевод символов русского текста в прописные
От: kirby  
Дата: 29.03.07 18:35
Оценка:
Здравствуйте, хочу поинтерисоваться, как можно перевести в С++ набор символов русского текста (дан массив заглавных букв) в прописные (tolower как я понял только для английских букв). Заранее благодарен.
Re: Перевод символов русского текста в прописные
От: kirby  
Дата: 29.03.07 18:40
Оценка: -1
Здравствуйте, kirby, Вы писали:

K>Здравствуйте, хочу поинтерисоваться, как можно перевести в С++ набор символов русского текста (дан массив заглавных букв) в прописные (tolower как я понял только для английских букв). Заранее благодарен.


Уже нашел. Кому интересно, пример кода:
for (int i=0;i<LenText;i++)
{
if(isascii(text[i]))
{text[i]=tolower(text[i]);}
else
{
if((text[i]>-1)||(text[i]<-32))
{text[i]=text[i]+32;
continue;}
if(text[i]==-88)
{text[i]=text[i]+16;
continue;}
}
}
Re: Перевод символов русского текста в прописные
От: deniok Россия  
Дата: 29.03.07 18:52
Оценка: -1
Здравствуйте, kirby, Вы писали:

K>Здравствуйте, хочу поинтерисоваться, как можно перевести в С++ набор символов русского текста (дан массив заглавных букв) в прописные (tolower как я понял только для английских букв). Заранее благодарен.


Это в С только для английских.

В C++ в <locale> в tolower вторым параметром локаль.
Re[2]: Перевод символов русского текста в прописные
От: Roman Odaisky Украина  
Дата: 29.03.07 21:02
Оценка:
Здравствуйте, kirby, Вы писали:

K>>Здравствуйте, хочу поинтерисоваться, как можно перевести в С++ набор символов русского текста (дан массив заглавных букв) в прописные (tolower как я понял только для английских букв). Заранее благодарен.


K>Уже нашел. Кому интересно, пример кода:

K>
for (int i=0;i<LenText;i++)
K>    {
K>        if(isascii(text[i])) 
K>        {text[i]=tolower(text[i]);}            
K>        else
K>        {                            
K>                if((text[i]>-1)||(text[i]<-32))
K>                {text[i]=text[i]+32;
K>                   continue;}
K>                if(text[i]==-88)
K>                {text[i]=text[i]+16;
K>                   continue;}       
K>        }
K>    }


Непортабельно, некрасиво, неправильно.

RTFM("std::locale").

P. S. Помнится, есть англоязычный канал Russia Today… у них есть еще и FM-вещание?
До последнего не верил в пирамиду Лебедева.
Re: Все не так!
От: degor Россия  
Дата: 30.03.07 08:40
Оценка:
Здравствуйте, kirby, Вы писали:

K>Здравствуйте, хочу поинтерисоваться, как можно перевести в С++ набор символов русского текста (дан массив заглавных букв) в прописные (tolower как я понял только для английских букв). Заранее благодарен.


для этого есть функция setlocale(). пользоваться ей надо так:

// сохранить старую локаль (как правило, "C")
char* locale = setlocale(LC_ALL, NULL);

// Поставить свою локаль
setlocale(LC_ALL, "rus");

/*
  сделать все, что нужно
*/
// и вернуть локаль на место
setlocale(LC_ALL, locale);


не важно плюсы это или нет. подробности в msdn, man и т.д.
Re[2]: Перевод символов русского текста в прописные
От: Кодт Россия  
Дата: 30.03.07 08:43
Оценка: +1
Здравствуйте, deniok, Вы писали:

D>Это в С только для английских.


А если я предварительно сделаю setlocale?
#include <locale.h>
#include <stdio.h>
#include <ctype.h>

int main()
{
    int i;
    setlocale(LC_ALL,".866"); /* cyrillic-dos */
    for(i=128; i!=256; ++i)
        printf("%c %c\n", i, toupper(i));
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.