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

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

Войти
Регистрация
Восстановить пароль
 
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
#1

как вывести русскими буквами слово С++ - C++

23.02.2014, 22:45. Просмотров 744. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
#include  <string>
 using namespace std;
int main(){
string word;
cin>>word;
//отображение символов в обратном порядке
for(int i=word.size()-1;i>=0;i--)
cout<<word[i];
cout<<"\n";
return 0;
}
как сделать ,чтобы вводились русские буквы и выводились тоже русские. На английской раскладке все работает отлично.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 22:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как вывести русскими буквами слово С++ (C++):

Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами - C++
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами.

Вывод русскими буквами - C++
Вообщем в задачке нужно рассчитать всевозможные тройки ФИО. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; #include...

Как печатать в cout << " РУССКИМИ БУКВАМИ" - C++
Собственно проблема не втом чтобы наляпать в кауте русскими буквами, а чтобы потом эти русские буквы вывело на екран, а не абракадабру.....

Регистронезависимое сравнение строк с русскими буквами - C++
Необходимо регистронезависимо сравнивать строки string с русскими буквами. Пробовал поиграться с встроенным toUpper но у меня вот так он не...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6360 / 5924 / 1921
Регистрация: 18.12.2011
Сообщений: 15,228
Завершенные тесты: 1
23.02.2014, 22:48 #2
СМ. Русские шрифты в консоли
JFF_by
2 / 2 / 0
Регистрация: 16.09.2013
Сообщений: 42
23.02.2014, 22:52 #3
попробуй подключить
C++ (Qt)
1
#include <locale>
и в мэйне добавить:
C++ (Qt)
1
setlocale( LC_ALL,"Russian" );
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
23.02.2014, 22:53 #4
Можно и без
C++
1
#include <locale>
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
23.02.2014, 22:58  [ТС] #5
JFF_by, не проходит ,я это пробовал .вот например вывод малышка
�кЈыѻам
причем в винвсе работает хорошо ,а у меня линукс ...
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
23.02.2014, 22:59 #6
sergei60, У меня корректно заработало так... попробуй.
C++
1
2
3
4
#include <windows.h>
//и
SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
23.02.2014, 23:11  [ТС] #7
о_О_Кто_здесь, это тоже не прошло c++.cpp:3:21: фатальная ошибка: windows.h: Нет такого файла или каталога
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
23.02.2014, 23:19 #8
В линуксе все должно работать из коробки. Только нужно обеспечить некоторые вещи:
1) Исходник должен быть в UTF-8, т.к. GCC по умолчанию использует именно эту кодировку.
2) Текущая сиcтемная локаль должна быть ru_RU.UTF-8. (можно проверить командой locale).

Так же можно использовать setlocale(LC_ALL, "ru_RU.UTF-8");
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
23.02.2014, 23:26  [ТС] #9
DrOffset, мама
�мам
это получилось когда поставил setlocale(LC_ALL, "ru_RU.UTF-8");
может в коде что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dimon@dimon-Lenovo-G570:~$ locale
LANG=ru_RU.UTF-8
LANGUAGE=ru:en
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
24.02.2014, 15:12 #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от sergei60 Посмотреть сообщение
может в коде что не так?
Проблема в том, что в UTF-8 символ может кодироваться несколькими байтами. И это точно так в случае русских букв. Переворачивая строку таким образом вы нарушаете порядок байтов.
Попробую сейчас набросать пример правильного разворота.

Добавлено через 15 часов 36 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <algorithm>
 
template <typename IteratorT>
IteratorT reverse_array(IteratorT begin, IteratorT end)
{
    const size_t len = std::distance(begin, end);
    for(size_t i = 0; i < len / 2; ++i)
    {
       std::swap(*(begin + i), *(begin + (len - i - 1)));
    }
    return begin;
}
 
template <typename IteratorT>
IteratorT reverse_utf8(IteratorT begin, IteratorT end)
{
    // обычный разворот
    reverse_array(begin, end);
    while(begin < --end)
    {
        // выправим последовательности
        switch((*end & 0xF0) >> 4)
        {
        case 0xC: /* control */
        case 0xD: // два байта, U+000080-U+0007FF
            std::swap(*end, *(end - 1));
            end -= 1;
            break;
        case 0xE: // три байта, U+000800-U+00FFFF
            std::swap(*end, *(end - 2));
            end -= 2;
            break;
        case 0xF: // четыре байта, U+010000-U+10FFFF
            std::swap(*end,       *(end - 3));
            std::swap(*(end - 1), *(end - 2));
            end -= 3;
            break;
        }
    }
    return begin;
}
int main()
{
    std::string word;
    std::cin >> word;
    reverse_utf8(word.begin(), word.end());
    std::cout << word << "\n";
    return 0;
}
Записывает разворот в ту же строку.
Вообще я бы не рекомендовал писать такие велосипеды, лучше воспользоваться готовыми средствами.
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 372
24.02.2014, 17:37  [ТС] #11
Благодарю и еще и так! Мечтаю дорости хоть когда то ,когда то..Спасибо. Буду разбираться со ссылкой ,данной вами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 17:37
Привет! Вот еще темы с ответами:

fopen и путь к файлу c русскими буквами - C++
Всем привет:) Вот столкнулся с такой проблемой - необходимо открыть файл, путь к которому вводится в консоли. Для открытия файла...

Программа не хочет работать с русскими буквами - C++
Здравствуйте! Программа инвертирует цифры в 8 системе счисления, и должна преобразовывать Заглавные Русские буквы в строчные. ...

Неправильно работает функция strcmp c русскими буквами - C++
Пытаюсь сравнить строку с литералом. void main() { setlocale(LC_ALL, &quot;Rus&quot;); string s1; cin &gt;&gt; s1; int k =...

Массив словаря почему-то не работает с русскими буквами - C++
Дан двумерный массив словаря, почему не работает с русскими буквами, а работает только с английскими, помогите разобраться: #include...


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

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

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