Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 15:03
Оценка:
Здравствуйте, господа.

Я снова обращаюсь к вам с довольно глупым вопросом — как можно использовать русские буквы в case?

Заранее благодарю за возможные ответы.
Re: Как использовать русские буквы в case
От: fuyant  
Дата: 05.05.11 15:11
Оценка: +1
Здравствуйте, YourLastSong, Вы писали:

YLS>Здравствуйте, господа.


YLS>Я снова обращаюсь к вам с довольно глупым вопросом — как можно использовать русские буквы в case?


вопрос не столько глупый, сколько непонятный

YLS>Заранее благодарю за возможные ответы.
Re[2]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 15:38
Оценка:
Мне необходимо сделать что-нибудь наподобие:

case 'а':
...
case 'б':
...

У меня почему-то так не работает.
Re[3]: Как использовать русские буквы в case
От: wander  
Дата: 05.05.11 15:43
Оценка: 1 (1)
Здравствуйте, YourLastSong, Вы писали:

YLS>Мне необходимо сделать что-нибудь наподобие:


YLS>case 'а':

YLS>...
YLS>case 'б':
YLS>...

YLS>У меня почему-то так не работает.


Если у тебя исходник, например, в cp1251, а входные данные, скажем, в UTF8 и ты его вот так проверяешь, то естественно работать не будет.
Re[4]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 15:48
Оценка:
Простите за столь глупый для вас вопрос, но как это исправить можно?
Re: Как использовать русские буквы в case
От: okman Беларусь https://searchinform.ru/
Дата: 05.05.11 15:48
Оценка: 1 (1)
Здравствуйте, YourLastSong, Вы писали:

YLS>Здравствуйте, господа.


YLS>Я снова обращаюсь к вам с довольно глупым вопросом — как можно использовать русские буквы в case?


YLS>Заранее благодарю за возможные ответы.


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

case L'ж':
...
case L'ф':


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

Вообще, аспекты программы, связанныме с различиями в языках и локализациях,
лучше обрабатывать особым образом. Например, в Windows для этого есть секции ресурсов.
Re[2]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 15:55
Оценка:
O>Но я не советую Вам так делать, хоть это и возможно.
O>Дело в том, что кодировка исходного файла может быть разной.
O>Соответственно, коды символов будут разными и получится результат,
O>отличный от ожидаемого.

Как раз вот эта проблема.

Что-то ещё сделать можно, помимо того способа, который вы уже назвали.
Re[5]: Как использовать русские буквы в case
От: wander  
Дата: 05.05.11 16:01
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>Простите за столь глупый для вас вопрос, но как это исправить можно?

Всегда удивляло желание себя попринижать. Не надо. Вопрос совсем не глупый. И простого и однозначного способа это исправить нет.
1. смотри ответ
Автор: okman
Дата: 05.05.11
.
2. стоит почитать про wide char.
3. стоит почитать про setlocale, std::locale, std::codecvt.
4. стоит посмотреть на подход, который используется в Qt (для самообразования в первую очередь).
5. стоит посмотреть библиотеку iconv.
Re[3]: Как использовать русские буквы в case
От: okman Беларусь https://searchinform.ru/
Дата: 05.05.11 16:02
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>Что-то ещё сделать можно, помимо того способа, который вы уже назвали.


Символьные литералы можно записать в виде кодов соответствующих символов.
По крайней мере, не будет сюрпризов из-за возможного перекодирования исходных файлов.
Re[4]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 16:06
Оценка:
O>Символьные литералы можно записать в виде кодов соответствующих символов.

Можно сылку на коды? А то уже какие-то коды пробовал вроде, не получилось.
Re[5]: Как использовать русские буквы в case
От: okman Беларусь https://searchinform.ru/
Дата: 05.05.11 16:11
Оценка: +2
Здравствуйте, YourLastSong, Вы писали:

O>>Символьные литералы можно записать в виде кодов соответствующих символов.


YLS>Можно сылку на коды? А то уже какие-то коды пробовал вроде, не получилось.


Прочтите для начала вот это:Ссылка

Как минимум проясняет ситуацию со всеми этими кодовыми страницами, Юникодами, BOM и прочим.
Re[6]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 16:38
Оценка:
Получается, мне необходимо изменить char на wchar_t, а также использовать все функции, связанные с ними?

Честно говоря, если вы не сочтёте это за наглость, мне было бы гораздо легче, если бы вы привели небольшой пример, что можно сделать в моём случае, а я уже поищу тогда, что означает каждая из этих строчек, если будет что-то непонятное.
Re[6]: Как использовать русские буквы в case
От: YourLastSong  
Дата: 05.05.11 17:15
Оценка:
Могу выслать вам также текст программы, если вы всё же сможете сказать, что именно мне стоит сделать.
Re[5]: Как использовать русские буквы в case
От: Valen  
Дата: 05.05.11 21:08
Оценка: 2 (2)
Здравствуйте, YourLastSong, Вы писали:

O>>Символьные литералы можно записать в виде кодов соответствующих символов.


YLS>Можно сылку на коды? А то уже какие-то коды пробовал вроде, не получилось.

Если я правильно понял, то например, http://en.wikipedia.org/wiki/Windows-1251
используя коды символов можно будет вместо
case 'a':
case 'б':
написать
case 0xE0: // символ 'а' в кодировке cp1251
case 0xE1: // символ 'б' в кодировке cp1251

тогда не будет проблем с тем, в какой кодировке у Вас исходные файлы. можно в cp1251, можно в uft-8

но Вы должны четко понимать, что входной текст или отдельные символы (которые, например, пользователь вводит с клавиатуры), должны быть в той же кодировке, что и коды символов в case. если пользователь ввел символ "а" в кодировке cp866 (код 0xA0), то соответствующий case не отработает, хотя должен, т.к. "пользователь ввел символ 'а'".
Re[7]: Как использовать русские буквы в case
От: okman Беларусь https://searchinform.ru/
Дата: 06.05.11 06:30
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>Получается, мне необходимо изменить char на wchar_t, а также использовать все функции, связанные с ними?


При использовании Юникода уходит множество проблем, таких как определение кодовой страницы, например.
А некоторые программные интерфейсы вообще работают только с Юникодом.
Так что этот вопрос давно уже перестал быть делом вкуса. Выбирайте UTF-16 или UTF-8, в зависимости от
платформы, под которую пишете, и эти проблемы Вас никогда не коснутся.

YLS>Честно говоря, если вы не сочтёте это за наглость, мне было бы гораздо легче, если бы вы привели небольшой пример, что можно сделать в моём случае, а я уже поищу тогда, что означает каждая из этих строчек, если будет что-то непонятное.


Можно, а стоит ли ?
У Вас же есть компилятор, наверняка еще какая-то литература — вот их и "спросите".
Будет намного больше пользы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.