C/C++

кириллица в консольной программе

Сделал программу, такую, как хотел, но возникла проблема... изучаю программирование недавно, потому не думал, что такая проблема возникнет. короче, программа: у пользователя в буфере обмена несколько слов, например, (дворец король королева), при открытии программы, слова обрабатываются специальным образом и у пользователя в буфере обмена оказывается что-то типа (король дворец королева). если изначально слова написаны латиницей, то всё отлично, а вот если кириллицей- то в результате получаются одни ???? в буфере обмена... догадываюсь, что это обычное дело, но неужели нельзя никак решить эту проблему, кроме как изменения кодировки на компьютере? хотелось бы, чтобы эта программа работала на любом другом компьютере, кроме моего, тоже. наверное, можно решить эту проблему, написав приложение win32, но я пока не умею, т. ч. хотелось бы доработать этот вариант! может, можно что-то забить в программу? спасибо всем за ответы!
Недолгое изучение программирования не отменяет возможностей поиска:
http://forum.codeby.net/topic9843.html
http://forum.codeby.net/topic8448.html
http://forum.codeby.net/topic8003.html
спасибо, поиском научился пользоваться раньше, чем программировать! читал я эти посты, но мне не подходит- как быть, если слова изначально будут на разных языках, т. е. некоторые кириллицей, а некоторые- латиницей? разве вот только CharToOem попробовать, но, как начинающий, я не умею, на мастдае сложно разобраться, ибо в английском не силён! не могли бы Вы описать правила использования этой функции? спасибо!
Цитата(Seva @ 7:05:2007, 17:17 )
пробовал... вот уже несколько дней бьюсь, НО! в программе кирилическое слово поступает из буфера обмена, т. е. тип строковый, string, а CharToOem обрабатывает только тип char, как я понимаю, ибо ни в какую не хочет работать со строковым параметром. ещё предложения?
Сообщение отредактировал Seva - 15:05:2007, 10:24
Цитата(Seva @ 15:05:2007, 11:22 )
это вот так:
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string name="проблема";
char bulb=name.c_str();
cout<<"1: "<<name
<<"\n2: "<<bulb<<endl;
return 0;
}
?
не работает! пишет 1 ошибка:
(7) error C2440: 'initializing' : cannot convert from 'const char *' to 'char'
так как же можно преобразовать string в char? например, с помощью atof() можно сделать такое преобразование, не пробовали? а если можно, то как?
Если очень хочется, то можно сделать следующим образом, однако такая строка - потенциальный источник ошибок на этапе выполнения:
Код
спасибо, конечно, первый вариант лучше подходит, НО, опять проблема, опять преобразование... теперь бы этот char* bulb преобразовать в char c_bulb, чтобы его потом функцией CarToOem обработать, а с char* она не хочет работать! не знаете как это решить?
Уважаемый, а вы в MSDN хоть заглядывали?
Преобразуй char* в LPCTSTR или LPSTR в зависимости от параметра
Да заглядывал, заглядывал, даже больше- старался внимательно изучать... но вот что у меня получается:
#include<iostream>
#include <windows.h>
#include<string>
using namespace std;
int main(void)
{
char bulb2;
string name="проблема";
const char* bulb = name.c_str();
CharToOem(bulb2,bulb);
cout<<"1: "<<name
<<"\n2: "<<bulb2<<endl;
return 0;
}
по задумке на экране в строчке 2 должно быть слово "проблема" (bulb2), но компилятор упорно выдаёт ошибку:
(10) : error C2664: 'CharToOemA' : cannot convert parameter 1 from 'char' to 'const char *'
это опять я что-то не так сделал? а что? вроде, всё, как в мастдае написано...
Сообщение отредактировал Seva - 15:05:2007, 16:58
Попробуй поставить амперсанд.
Цитата(Seva @ 15:05:2007, 17:57 )
О-о, какой-то мастдай у тебя неправильный, если ты параметры местами перепутал... А я то думаю, чего CharToOem с char* не хочет работать...
Код
О! то, что доктор прописал! СПАСИБО!
Жаль, что спасибо на хлеб не намажешь
ага, и в стакан налить тоже!
работаем дальше... возникает опять проблема: из буфера обмена всё выводится на экран, но не всегда корректно, т. е. если в буфере ТОЛЬКО кирилические символы (Иван) или ТОЛЬКО латиница (Pupkin), то всё работает корректно, но стоит поработать с совмещённым буфером (Иван Pupkin), так сразу вместо кирилицы получаются ??? не подскажете в чём проблема? вот код:
Код