Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aitar
0 / 0 / 0
Регистрация: 25.09.2013
Сообщений: 18
#1

Кроссплатформенный перевод русских букв в верхний/нижний регистр - C++

15.04.2014, 11:42. Просмотров 1051. Ответов 4
Метки нет (Все метки)

Добрый день.
В прикрепленном топике описываются способы вывода русских букв на консоль. Но они почти все подвязаны под винду.
Более того, стандартная функция std::tolower/toupper не работает с русскими буквами.
Подскажите кроссплатформенный вариант перевода русских букв в другой регистр, считывать я буду с std::cin, файлов.
Нужна работа на nix и винде. Пробовал буст, но он тоже работает только с англо буквами. Если подцепляться конкретно к винде, то не будет компилиться под nix системами. Вот в чём проблема.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 11:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кроссплатформенный перевод русских букв в верхний/нижний регистр (C++):

Перевод букв в нижний регистр - C++
Как перевести все буквы строки введенной с клавиатуры в нижний регистр?

Перевод всех строчных букв в верхний регистр - C++
Переведите все строчные буквы-символы в верхний регистр

Верхний и нижний регистр - C++
Напишите программу, которая читает клавиатурный ввод до символа @ и повторяет его, за исключением десятичных цифр, преобразуя каждую...

Верхний и нижний регистр буквы - C++
#include <cctype> #include <iostream> int main() { using namespace std; char ch; while(cin.get(ch) && ch !=...

Строки в С++. Верхний и нижний регистр - C++
char alphabet; int i; char letter; for(letter='A',i=0;letter<='Z'; letter++,i++) alphabet=letter; alphabet=NULL;...

Преобразование строки сначала в верхний регистр, потом в нижний - C++
Напишите программу, которая преобразовывает все символы введенной строки сначала в верхний регистр затем в нижний регистр а затем заменяет...

4
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
15.04.2014, 12:19 #2
Aitar, Оно работает с русскими буквами. Нужно только верную локаль выставить.
0
Aitar
0 / 0 / 0
Регистрация: 25.09.2013
Сообщений: 18
16.04.2014, 02:05  [ТС] #3
Пробовал с "rus" - не работало.
С rus_rus.866 работает.
Будет ли этотже способ работать и под nix системами ?
Как я понял какую локаль ставить зависит от кодировки текстового файла. А что если предполагается подача файла с разными кодировками ?
0
IrineK
Заблокирован
16.04.2014, 03:00 #4
Напишите руками.
Тут gazlan уже toupper сделал и чисто для консоли и для вывода в файл:
Написать программу перевода строчных букв в прописные буквы
Написать программу перевода строчных букв в прописные буквы

Назад - аналогично.
Посмотрите кодировки СР866 и СР1251 и уясните, что и когда нужно.
0
Вложения
Тип файла: pdf ascii.pdf (164.5 Кб, 11 просмотров)
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
16.04.2014, 09:36 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Aitar Посмотреть сообщение
Как я понял какую локаль ставить зависит от кодировки текстового файла.
Локаль не зависит от кодировки текстового файла. От кодировки текстового файла зависит то, что будет содержать строка. Общий и правильный подход - не зашивать локализованные строки в исходник. Посмотри на подход, который предлагает Qt, основная суть:
1) Представление строк приложения едино (юникод);
2) Локализованные строки хранятся отдельно в контролируемом месте в какой-то конкретной кодировке;
3) Программа по-умолчанию использует текущую системную локаль.
----
Если брать конкретно функции toupper и tolower, то это дожны быть функции, которые работают с юникодом. Под windows принято использовать wchar_t варианты строк (ucs-2), в unix практически повсеместно используется char (utf-8).

Цитата Сообщение от Aitar Посмотреть сообщение
Будет ли этотже способ работать и под nix системами ?
Будет, только локаль там называется подругому. Это, можно считать, настроечная информация. Она должна определяться при старте программы (или в настройках).

По поводу кодировок и компилятора:
GCC - по-умолчанию считает, что файл в кодировке UTF-8. VC++, кажется, ставит кодировку в соответствии с локализацией системы, т.е. для русской windows это будет CP1251. Именно исходя из этого, хранить локализованные строки в исходнике - неправильно.
По поводу самописных вещей - зачем, когда есть стандартные. CP1251 почти не применяется в *nix, да и завязываться на однобайтную кодировку когда весь мир использует юникод - точно непортабельно.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2014, 09:36
Привет! Вот еще темы с ответами:

Перевод символов в верхний/нижний регистры - C++
Ребят. Подскажите как прописать функцию. Для перевода букв a. toLower – перевод буквы в нижний регистр b. toUpper – перевод буквы...

Перевод в нижний регистр - C++
Приветствую . Прошу помощи , выдаёт ошибку при переводе в нижний регистр , в чём проблема ? #include <vector> #include <fstream> ...

Перевод в нижний регистр - C++
Есть строка стринг в которой записана кириллица, нужно перевести ее в нижний регистр.

Перевод символа в нижний регистр - C++
Привет всем)) у меня такой вопрос: почему функция tolower() возвращает не символ в нижнем регистре, а какие-то цифры (наверное код буквы)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
16.04.2014, 09:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru