Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема строки по русски в С++ (число прочтений - 3355 )
fire84
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 05. Августа 2008
строки по русски в С++
05. Августа 2008 :: 12:07
Печать  
Здравствуйте, у меня такая проблема пытаюсь прикрутить к 1С ВК, написанную на С++ (не мной), но там с русским проблема - выводятся в OEM кодировке, как победить проблему? (т.е. чтобы вывод шел в анси кодировке со стандартными не МФК строками)
  
Наверх
 
IP записан
 
fire84
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 05. Августа 2008
Re: строки по русски в С++
Ответ #1 - 06. Августа 2008 :: 05:21
Печать  
setlocale(LC_CTYPE,"Russian");
частично решило проблему - русский выводится нормально.
Но есть еще одна засада: допустит есть файл, в котором присутствуют слова с русскими буквами. при анализе содержимого файла нужно разделить содержимое файла на слова только с буквами и прочие.
Так вот if (cc>='А'.....
не работает, т.к. файл в кодировке 1251
кто знает, что делать? срочно надо - это мое приемное задание на работу. у меня исп срок заканчивается, мне уже ноут выделили, вобщем какбы работать-то начала, но начальник задание дал, а у нас по с++ всего 16 ак. часов было, и на заданиях даже преподы вместо русского латиницу использовали.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: строки по русски в С++
Ответ #2 - 06. Августа 2008 :: 05:41
Печать  
м.б.
setlocale( LC_ALL, ".1251" );
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: строки по русски в С++
Ответ #3 - 06. Августа 2008 :: 06:01
Печать  
и вместо if (cc>='А'... использовать if(isalpha(cc))
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: строки по русски в С++
Ответ #4 - 06. Августа 2008 :: 06:15
Печать  
Афтар, купи Страуструпа, там по локалям целый параграф..
  
Наверх
IP записан
 
fire84
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 05. Августа 2008
Re: строки по русски в С++
Ответ #5 - 06. Августа 2008 :: 06:33
Печать  
2steban
спасибо, заработало.
а isalpha() я использовать немогу - мне надо слова со строчными отдельно, а с прописными отдельнои русские и английские тоже разделять

еще вопрос - если у меня проект побит на несколько dll, setlocale можно установить в функции main главного приложения или и dll-ки нужно компилировать как-то иначе?
и как без setlocale можно решить проблему?
Дело в том, что на ноуте, который дал мне шеф я нашла проект на с++, где никакого setlocale  и в помине нет. а с русскими символами нормально работает.
  
Наверх
 
IP записан
 
fire84
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 05. Августа 2008
Re: строки по русски в С++
Ответ #6 - 06. Августа 2008 :: 06:47
Печать  
steban писал(а) 06. Августа 2008 :: 05:41:
м.б.
setlocale( LC_ALL, ".1251" );


извиняюсь, но не совсем помогло Печаль
т.е если использую ifalpha, то действительно работает (определяет, что это буквы),
а if (cc>='А' не работает Печаль а мне надо не только, что это буквы, но и разделить на строчные/прописные, русс/англ.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: строки по русски в С++
Ответ #7 - 06. Августа 2008 :: 11:39
Печать  
Странно, спрашиваешь про строки, а код сравнения показываешь для чаров...
Далее - ежели 'А' - это русская А, то попробуй так:
Код
Выбрать все
if((unsigned char)cc >= (unsigned char)'А' 


Дело в том, что тип char - знаковый, и соотвественно символ русской 'А' в char'е не 192, а -64.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать