ВШ
Владимир Шкваркуненко

С++. не выводит строку символов в обратном порядке по-русски. в чем причина?

вот код

#include "stdafx.h"
#include "locale"
#include
#include
using namespace std;

int main()
{
setlocale (LC_ALL, "Russian");

string my_string;
cout << "Введите строку: \n";
getline(cin, my_string);
cout << "Строка наоборот: \n";

int l = my_string.length();
for (int i=my_string.length()-1; i>=0; i--) {
cout << my_string;
}
cout << endl;

system ("pause");
return 0;
}

и вообще вместо того, чтобы выводить хоть что-то, кроме cout, по-русски, пишет ерунду какую-то

АЛ
Алексей Логинов

Простой вариант с "широкими" строками:

#include
#include
#include
#include

using namespace std;

int main() {
locale l(".866");
wcin.imbue(l);
wcout.imbue(l);
wcout << L"Введите строку: \n";
wstring s;
getline(wcin, s);
wcout << L"Строка наоборот: \n";
reverse(s.begin(), s.end());
wcout << s << endl;
}



Можно постоянно менять локаль:

#include
#include
#include
#include

using namespace std;

int main() {
locale ru("");
locale ci("C");
locale::global(ru);
cout << "Введите строку: \n";
locale::global(ci);
string s;
getline(cin, s);
locale::global(ru);
cout << "Строка наоборот: \n";
locale::global(ci);
reverse(s.begin(), s.end());
cout << s << endl;
}

Другие способы либо более сложные, либо работают не всегда. К примеру, такой вариант:

#include
#include
#include
#include

using namespace std;

int main() {
system("chcp 1251 > nul");
cout << "Введите строку: \n";
string s;
getline(cin, s);
cout << "Строка наоборот: \n";
reverse(s.begin(), s.end());
cout << s << endl;
}

будет работать, только если для консольного окна установлен TrueType шрифт).

ДД
Дима Дима

а в прямом выводит?
ах, да, убедись, что русская буква - не два char

Хасаншо Bobojonov
Хасаншо Bobojonov

С++ весьма скверно работает с кириллицей. Проблема что те кодировки котрые подает ему редактор он обычно не воспринимает.
Можно получить коды символов и использовать их. К примеру попробуйте:

char cs[14] = {-126,-94,-91,-92,-88,-30,-91,32,-31,-30,-82,-86,-29};
cout << cs ;

Получить эти коды можно, к примеру так:

getline(cin, my_string);
for( int i = 0; i < my_string.length(); i++ ){
int p = my_string [ i ];
cout << p << " + ";
}

Похожие вопросы
Нужна программа на С. Копирование строки с обратным порядком согласных в конец другой.
(Borland pascal) Написать программу, которая считывает строку с группами символов и выводит строку лиз групп символов...
помогите написать код в С++. Задать строку из произвольных символов и переписать строку в обратном порядке
Помогите удалить символы в строке!
как в с++ символ дописать к строке? как в с++ символ дописать к строке?
Дана строка символов. Определить длину строки. Если длина строки <=20, то найти в строке порядковый номер символа *
Как сделать чтобы на ассемблере символы выводились в обратном порядке?
Напишите программу, которая запрашивает ввод строки символов и выводит на экран эти символы в обратном порядке.
Excel. Строки в столбце поставить в обратном порядке
Не выводятся русские символы в CMD.