Задать вопрос
@kentos

Как менять функциональность относительно выбранного языка?

Пишу небольшую консольную программу, которая декодит с англ и рус, на код морзе, и наооборот. Сейчас проблема в том, что какой я бы язык не выбрал, все равно декодит, т.е если выбираешь рус, и пишешь на англ, то все равно выбирает, как пофиксить, чтобы при выборе языка, можно было декодить только тот язык, который выбрал

Код
using namespace std;
void choose_language(bool& is_russian_enabled)
{
    short code;
    cout << "Ïîæàëóéñòà, âûáåðèòå ÿçûê.\n1 - Rus, 2 - Eng: ";
    while (!(cin >> code) || (code < 0) || code > 2)
    {
        cin.clear();
        cin.ignore(32000, '\n');
        cout << "You've entered wrong num, try again: ";
        _getch();
        system("cls");
        cout << "Please, choose lang.\n1 - Rus, 2 - Eng: ";
    }
    if (code == 1)
    {
        is_russian_enabled = true;
    }
}
string charToMorse(char letter)
{
    switch (letter)
    {
    case 'a': case 'A':
        return ".-"; break;
    case 'b': case 'B':
        return "-..."; break;
    case 'c': case 'C':
        return "-.-."; break;
    case 'd': case 'D':
        return "-.."; break;
    case 'e': case 'E':
        return "."; break;
    case 'f': case 'F':
        return "..-."; break;
    case 'g': case 'G':
        return "--."; break;
    case 'h': case 'H':
        return "...."; break;
    case 'i': case 'I':
        return ".."; break;
    case 'j': case 'J':
        return ".---"; break;
    case 'k': case 'K':
        return "-.-"; break;
    case 'l': case 'L':
        return ".-.."; break;
    case 'm': case 'M':
        return "--"; break;
    case 'n': case 'N':
        return "-."; break;
    case 'o': case 'O':
        return "---"; break;
    case 'p': case 'P':
        return ".--."; break;
    case 'q': case 'Q':
        return "--.-"; break;
    case 'r': case 'R':
        return ".-."; break;
    case 's': case 'S':
        return "..."; break;
    case 't': case 'T':
        return "-"; break;
    case 'u': case 'U':
        return "..-"; break;
    case 'v': case 'V':
        return "...-"; break;
    case 'w': case 'W':
        return ".--"; break;
    case 'x': case 'X':
        return "-..-"; break;
    case 'y': case 'Y':
        return "-.--"; break;
    case 'z': case 'Z':
        return "--.."; break;
    case 'à': case 'À':
        return ".-"; break;
    case 'á': case 'Á':
        return "-..."; break;
    case 'â': case 'Â':
        return ".--"; break;
    case 'ã': case 'Ã':
        return "--."; break;
    case 'ä': case 'Ä':
        return "-.."; break;
    case 'å': case 'Å':
        return "."; break;
    case 'æ': case 'Æ':
        return "...-"; break;
    case 'ç': case 'Ç':
        return "--.."; break;
    case 'è': case 'È':
        return ".."; break;
    case 'é': case 'É':
        return ".---"; break;
    case 'ê': case 'Ê':
        return "-.-"; break;
    case 'ë': case 'Ë':
        return ".-.."; break;
    case 'ì': case 'Ì':
        return "--"; break;
    case 'í': case 'Í':
        return "-."; break;
    case 'î': case 'Î':
        return "---"; break;
    case 'ï': case 'Ï':
        return ".--."; break;
    case 'ð': case 'Ð':
        return ".-."; break;
    case 'ñ': case 'Ñ':
        return "..."; break;
    case 'ò': case 'Ò':
        return "-"; break;
    case 'ó': case 'Ó':
        return "..-"; break;
    case 'ô': case 'Ô':
        return "..-."; break;
    case 'õ': case 'Õ':
        return "...."; break;
    case 'ö': case 'Ö':
        return "-.-."; break;
    case '÷': case '×':
        return "---."; break;
    case 'ø': case 'Ø':
        return "----"; break;
    case 'ù': case 'Ù':
        return "--.-"; break;
    case 'ú': case 'Ú':
        return ".--.-."; break;
    case 'û': case 'Û':
        return "-.--"; break;
    case 'ü': case 'Ü':
        return "-..-"; break;
    case 'ý': case 'Ý':
        return "...-..."; break;
    case 'þ': case 'Þ':
        return "..--"; break;
    case 'ÿ': case 'ß':
        return ".-.-"; break;
    default:
        return " "; break;
    }
}
string morseToChar(string morse)
{

    if (morse == ".-")
    {
        return "a";
    }
    else if (morse == "-...")
    {
        return "b";
    }
    else if (morse == "-.-.")
    {
        return "c";
    }
    else if (morse == "-..")
    {
        return "d";
    }
    else if (morse == ".")
    {
        return "e";
    }
    else if (morse == "..-.")
    {
        return "f";
    }
    else if (morse == "--.")
    {
        return "g";
    }
    else if (morse == "....")
    {
        return "h";
    }
    else if (morse == "..")
    {
        return "i";
    }
    else if (morse == ".---")
    {
        return "j";
    }
    else if (morse == "-.-")
    {
        return "k";
    }
    else if (morse == ".-..")
    {
        return "l";
    }
    else if (morse == "--")
    {
        return "m";
    }
    else if (morse == "-.")
    {
        return "n";
    }
    else if (morse == "---")
    {
        return "o";
    }
    else if (morse == ".--.")
    {
        return "p";
    }
    else if (morse == "--.-")
    {
        return "q";
    }
    else if (morse == ".-.")
    {
        return "r";
    }
    else if (morse == "...")
    {
        return "s";
    }
    else if (morse == "-")
    {
        return "t";
    }
    else if (morse == "..-")
    {
        return "u";
    }
    else if (morse == "...-")
    {
        return "v";
    }
    else if (morse == ".--")
    {
        return "w";
    }
    else if (morse == "-..-")
    {
        return "x";
    }
    else if (morse == "-.--")
    {
        return "y";
    }
    else if (morse == "--..")
    {
        return "z";
    }
    else if (morse == ".-")
    {
        return "à";
    }
    else if (morse == "-...")
    {
        return "á";
    }
    else if (morse == ".--")
    {
        return "â";
    }
    else if (morse == "--.")
    {
        return "ã";
    }
    else if (morse == "-..")
    {
        return "ä";
    }
    else if (morse == ".")
    {
        return "å";
    }
    else if (morse == "...-")
    {
        return "æ";
    }
    else if (morse == "--..")
    {
        return "ç";
    }
    else if (morse == "..")
    {
        return "è";
    }
    else if (morse == ".---")
    {
        return "é";
    }
    else if (morse == "-.-")
    {
        return "ê";
    }
    else if (morse == ".-..")
    {
        return "ë";
    }
    else if (morse == "--")
    {
        return "ì";
    }
    else if (morse == "-.")
    {
        return "í";
    }
    else if (morse == "---")
    {
        return "î";
    }
    else if (morse == ".--.")
    {
        return "ï";
    }
    else if (morse == ".-.")
    {
        return "ð";
    }
    else if (morse == "...")
    {
        return "ñ";
    }
    else if (morse == "-")
    {
        return "ò";
    }
    else if (morse == "..-")
    {
        return "ó";
    }
    else if (morse == "..-.")
    {
        return "ô";
    }
    else if (morse == "....")
    {
        return "õ";
    }
    else if (morse == "-.-.")
    {
        return "ö";
    }
    else if (morse == "---.")
    {
        return "÷";
    }
    else if (morse == "----")
    {
        return "ø";
    }
    else if (morse == "--.-")
    {
        return "ù";
    }
    else if (morse == ".--.-.")
    {
        return "ú";
    }
    else if (morse == "-.--")
    {
        return "û";
    }
    else if (morse == "-..-")
    {
        return "ü";
    }
    else if (morse == "...-...")
    {
        return "ý";
    }
    else if (morse == "..--")
    {
        return "þ";
    }
    else if (morse == ".-.-")
    {
        return "ÿ";
    }

    else { return " "; }
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    bool is_russian_enabled = false;
    choose_language(is_russian_enabled);

    if (is_russian_enabled)
    {

        cout << "Êîíâåðòåð àçáóêè Ìîðçå" << endl;
    }
    else
    {
        cout << "Morse Code Converter" << endl;
    }
    ///  char str[20];
     // cin >> str; // ââîäèì ñòðîêó, èñïîëüçóÿ Êèðèëëèöó
     // cout << "\nâûâîä: " << str << endl; // ââûâîä ñòðîêè
    char key;
    bool loop = true;
    while (loop)
    {
        bool toMorse = true;
        string input;
        string output = "";
        int node = 0;
        string sub;
        cout << "Type word or morse code(using - and .): " << endl;
        cin.clear();
        cin.ignore(32000, '\n');
        getline(cin, input);
        if (input[1] == '.' || input[1] == '-')
        {
            toMorse = false;
        }
        else
        {
            toMorse = true;
        }
        if (toMorse)
        {
            for (unsigned int i = 0; i < input.length(); i++)
            {
                if (i != 0)
                {
                    output += " ";
                }
                output = output + charToMorse(input[i]);
            }
        }
        else {
            for (unsigned int i = 0; i <= input.length(); i++)
            {
                if (input[i] == ' ')
                {
                    sub = input.substr(node, i - node);
                    output += morseToChar(sub);
                    node = i + 1;
                }
                if (i == input.length() - 1)
                {
                    sub = input.substr(node, i + 1 - node);
                    output += morseToChar(sub);
                    node = i + 1;
                }
            }
        }
        cout << output << endl;
        cout << "Press r to restart or any key to exit" << endl;
        cin >> key;
        if (key != 'r')
        {
            loop = false;
        }
        cin.clear();
        //cin.ignore();
        input = "";
        cout << endl << endl;
    }

}
  • Вопрос задан
  • 86 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@calculator212
is_russian_enabled у вас используется только для того, чтобы определить какой текст выведется в начале, на сам перевод это не влияет. Проблема в том, что в функции charToMorse и morseToChar у вас сравнение идет по двум алфавитам, чтобы решить эту проблему либо создайте отдельную функцию rusToMorse и enToMorse либо функцию на 2 части разделите и выбирайте в зависимости от is_russian_enabled.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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