@Nikita1244
Anonymous

Программа не отвечает на кириллические символы — что делать?

Всем здравствуйте. Я хочу сделать чтобы текст преобразовывался в символы азбуки Морзе.
Написал такой код:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

wstring encrypt(const wstring &s) {
    wstringstream result;
    setlocale(LC_ALL, "ru");
    for (wstring::size_type i = 0; i < s.size(); i++) {
        switch (s[i]) {
            case L'А':
                result << L"•−" << L" ";
                break;

            case L'Б':
                result << L"-" << L" ";
                break;

            default:
                return L"Ошибка! Символ не найден в базе";
        }
    }
    return result.str();
}

// string decrypt() {}

int main() {
    setlocale(LC_ALL, "ru");
    wstring s;
    wcin >> s;
    wcout << encrypt(s);
}

Программа компилируется, но такая проблема - я ввожу русскую А, программа то ли ее не распознает, то ли что. Она просто молчит. Но если ввести латинскую букву, то она скажет, что она не знает такой символ. А на любые кириллические буквы - полный молчок от программы.
Еще мне пришлось использовать L'' в case, т.к. русские буквы в UTF-8 занимают два байта, а может содержать только один байт.
А еще, у меня печатает ошибку не русскими буквами, а транслитом:
Oshibka! Simvol ne najden v baze

Помогите мне, пожалуйста, решить эти проблемы
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Помогите мне, пожалуйста, решить эти проблемы

При условии правильной настройки переменных окружения достаточно заменить setlocale(LC_ALL, "ru"); на setlocale(LC_ALL, "");.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы