Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64

Можно ли в string присвоить кириллицу?

16.01.2020, 21:13. Показов 7927. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такой код. Если строку инициализировать сразу (str = "Привет"), то все нормально, но если попытаться через cin ввести русские буквы, то выдаёт абракадабру. Как это исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<string>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    string str;
    cin >> str;
 
    cout << str;
    
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2020, 21:13
Ответы с готовыми решениями:

Как можно присвоить 2 переменных string одной x?
Здравствуйте, а как можно присвоить 2 переменных string одной x? Пробовал различные варианты, безуспешно. Работает только через...

Можно ли переменной типа String присвоить кодировку (чат vk)
Подскажите можно ли переменной типа String присвоить кодировку? Проблема в том,что пишу оффлайн чат вконтакте и текст из ТекстБокса не...

Как string присвоить String? И как из string перевести в char[]?
Как string присвоить String? И как из string перевести в char?

8
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.01.2020, 21:14
Цитата Сообщение от Farnik Посмотреть сообщение
Как это исправить?
Разобраться с кодировками.

Добавлено через 15 секунд
Цитата Сообщение от Farnik Посмотреть сообщение
Как это исправить?
Разобраться с кодировками.
0
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
16.01.2020, 21:15  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Разобраться с кодировками
А никак проще нельзя?
0
 Аватар для Recrut_rf
379 / 322 / 65
Регистрация: 14.10.2014
Сообщений: 1,374
16.01.2020, 22:25
Лучший ответ Сообщение было отмечено Farnik как решение

Решение

Farnik,

там, где нужно ввести русские буквы, нужно использовать соответствующую кодировку (например кириллицу Windows, она же 1251)

Пример:

C++
1
2
3
4
cout << "Введите ваше сообщение!" << endl;
SetConsoleCP(1251); // устанавливаем кодировку - кириллицу
cin >> msg;
SetConsoleCP(866);  // возвращаем стандартную кодировку
Добавлено через 3 минуты
или же в функции main()
использовать:

C++
1
2
SetConsoleCP(1251);           //  вроде как для ввода 
SetConsoleOutputCP(1251);  // а это для вывода в консоль
1
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
16.01.2020, 22:51  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Farnik,
там, где нужно ввести русские буквы, нужно использовать соответствующую кодировку (например кириллицу Windows, она же 1251)
Пример:
C++Выделить код
1
2
3
4
cout << "Введите ваше сообщение!" << endl;
SetConsoleCP(1251); // устанавливаем кодировку - кириллицу
cin >> msg;
SetConsoleCP(866);  // возвращаем стандартную кодировку
Добавлено через 3 минуты
или же в функции main()
использовать:
C++Выделить код
1
2
SetConsoleCP(1251);           //  вроде как для ввода
SetConsoleOutputCP(1251);  // а это для вывода в консоль
Спасибо за ответ. Если если в setlocale(LC_ALL,"rus") вместо "rus" написать "1251", то всё тоже работает. Только вот в чём разница?
0
 Аватар для Recrut_rf
379 / 322 / 65
Регистрация: 14.10.2014
Сообщений: 1,374
16.01.2020, 23:10
Цитата Сообщение от Farnik Посмотреть сообщение
в чём разница
да ни в чём - обе функции (если мне не изменяет память) будут искать соответствующую локаль в винде по названию (к примеру "rus" - лично я так чаще всего пишу в setlocale(), или "Russian", ) или по цифровому коду (правда я так никогда не делал, но вы же написали, что
Цитата Сообщение от Farnik Посмотреть сообщение
тоже работает
).

И если найдут, будут использовать её.
0
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 64
16.01.2020, 23:20  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
да ни в чём - обе функции (если мне не изменяет память) будут искать соответствующую локаль в винде по названию (к примеру "rus" - лично я так чаще всего пишу в setlocale(), или "Russian", ) или по цифровому коду (правда я так никогда не делал, но вы же написали, что
Про setlocale я ошибся.Он только на вывод влияет. Если я правильно понял, то setlocale(LC_ALL, "rus") = SetConsoleOutputCP(1251), но != SetConsoleCP(1251). Так?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.01.2020, 23:22
Цитата Сообщение от Farnik Посмотреть сообщение
А никак проще нельзя?
Сохранить исходник в кодировке, используемой для ввода из консоли (.866).
Но лучше сразу почитать о кодировках и разобраться что к чему.
1
 Аватар для Recrut_rf
379 / 322 / 65
Регистрация: 14.10.2014
Сообщений: 1,374
16.01.2020, 23:53
Цитата Сообщение от Farnik Посмотреть сообщение
Он только на вывод влияет
да - всё верно, если нужно что-то ввести, то нужно
использовать SetConsoleCP(1251);

Добавлено через 46 секунд
но лучше конечно же

Цитата Сообщение от Croessmah Посмотреть сообщение
почитать о кодировках и разобраться что к чему
Добавлено через 23 минуты
Кстати о кодировках - мне как то на работе нужно было данные из текстового файла отсортировать и записать в другой текстовый файл. Чтобы упростить (или наоборот усложнить ) себе задачу, я это делал это при помощи Excel. То есть есть прога, генерирующая текстовый файл с нужными параметрами, но в нем нет разделителя между столбцами. А длина слов в столбце может различаться. Чтобы решить эту проблему - я придумал такое решение - данные из исходного текстового файла добавляются в Excel (он их без проблем понимает, но нужно выбрать нужную кодировку, иначе будет "непонятная шумерская клинопись"). Далее - создаём в нужных местах дополнительные столбцы с символами разделителями (к примеру '$'). Ну и пишем программу, посимвольно считывающую данные из нужного файла, ну а дальше - в зависимости от задачи.

Так вот, после Экселя кодировка в файле с исходными данными легко могла поменяться и соответственно моя прога переставала работать. Решалось это так - берем файл с исходными данными (или любой другой текстовый файл, который моя прога "понимает") и копируем в него данные из файла, который моя прога отказывается понимать. Сохраняем. И получаем автоматом нужную кодировку
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2020, 23:53
Помогаю со студенческими работами здесь

Можно ли использовать в SQL запросе кириллицу
Доброго всем времени суток. Есть скрипт который выбирает данные из одной базы данных, затем второй похожий скрипт должен выбрать из другой...

Можно ли заменить кириллицу на латиницу в пути файлов?
Добрый день. У меня стоит Windows10 русская версия.Мне понадобилось поставить для работы программу. Но она ставится только в Windows 7...

Как можно перевести единицы измерения с латиницы на кириллицу
Как можно перевести единицы измерения с латиницы на кириллицу. Пробовала какую-ту русификацию для маткада. Единицы измерения переводит, но...

Можно ли создать интерпретатор для перевода латинских букв в кириллицу
Можно ли создать интепритарор для перевода латинских букв в кирилицу,типа как на клаве: F=А,D=В и т.д СПАСИБО

есть массив char. есть строка string. как присвоить значению string-a значение char-a?
есть массив char. есть строка string. как присвоить значению string-a значение char-a?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru