Как я могу использовать оператор Switch для преобразования слова в алфавит ИКАО? - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь написать программу, которая преобразует слово, введенное пользователем, в алфавит Международной организации гражданской авиации, в котором должен использоваться оператор переключения, а не серия операторов if.Мне удалось выполнить эту работу для односимвольного ввода, но когда я попытался изменить программу, чтобы она преобразовывала серию букв путем добавления цикла while, преобразования стали неточными.

Как я объяснилвыше, я попытался добавить цикл while, чтобы программа читала каждый символ во введенном слове, что вызвало проблемы.

#include <iostream>
using namespace std;

int main()
{
    //Declare needed variables
    string word = " ";
    int count = 0;

    //Prompt user input
    cout << "Enter a word: ";
    cin >> word;

    while(count < word.length())
    {

    switch (word[count])
    {
        case 'A': case 'a': word = "Alpha";
            break;
        case 'B': case 'b': word = "Bravo";
            break;
        case 'C': case 'c': word = "Charlie";
            break;
        case 'D': case 'd': word = "Delta";
            break;
        case 'E': case 'e': word = "Echo";
            break;
        case 'F': case 'f': word = "Foxtrot";
            break;
        case 'G': case 'g': word = "Golf";
            break;
        case 'H': case 'h': word = "Hotel";
            break;
        case 'I': case 'i': word = "Indiana";
            break;
        case 'J': case 'j': word = "Juliet";
            break;
        case 'K': case 'k': word = "Kilo";
            break;
        case 'L': case 'l': word = "Lima";
            break;
        case 'M': case 'm': word = "Mike";
            break;
        case 'N': case 'n': word = "November";
            break;
        case 'O': case 'o': word = "Oscar";
            break;
        case 'P': case 'p': word = "Papa";
            break;
        case 'Q': case 'q': word = "Quebec";
            break;
        case 'R': case 'r': word = "Romeo";
            break;
        case 'S': case 's': word = "Sierra";
            break;
        case 'T': case 't': word = "Tango";
            break;
        case 'U': case 'u': word = "Uniform";
            break;
        case 'V': case 'v': word = "Victor";
            break;
        case 'W': case 'w': word = "Whiskey";
            break;
        case 'X': case 'x': word = "X-Ray";
            break;
        case 'Y': case 'y': word = "Yankee";
            break;
        case 'Z': case 'z': word = "Zulu";
            break;
        default: cout << "You did not enter a letter." << endl;
    }

    count++;
}
cout << "Phoenetic version is: " << word << endl;

return 0;
}

Этот код компилируется в своем текущем состоянии, но не дает мне желаемогоисходы.

1 Ответ

0 голосов
/ 12 июля 2019

Самая большая проблема, с которой вы сталкиваетесь, заключается в том, что вы меняете значение word каждый раз, когда назначаете фонетическое значение ИКАО, например, word = "Alpha"; Вам нужно использовать отдельное значение для построения строки результата, например,

    //Declare needed variables
    string word = " ", phonetic {};
    unsigned count = 0;
    ...
    while(count < word.length())
    {
        switch (word[count])
        {
            case 'A': case 'a': phonetic += " Alpha";
                break;
            case 'B': case 'b': phonetic += " Bravo";
                break;
            ...

( примечание: изменение на unsigned для count для предотвращения сравнения значений со знаком и без знака, а также использование += для добавления каждого фонетического слова к phonetic - как а также пробел, добавленный перед каждым)

Теперь, когда фонетический результат ИКАО хранится в phonetic, вы можете вывести результат:

    cout << "Phoenetic version is:" << phonetic << endl;

В целом, вы можете сделать:

#include <iostream>
using namespace std;

int main (void)
{
    //Declare needed variables
    string word = " ", phonetic {};
    unsigned count = 0;

    //Prompt user input
    cout << "Enter a word: ";
    cin >> word;

    while(count < word.length())
    {
        switch (word[count])
        {
            case 'A': case 'a': phonetic += " Alpha";
                break;
            case 'B': case 'b': phonetic += " Bravo";
                break;
            case 'C': case 'c': phonetic += " Charlie";
                break;
            case 'D': case 'd': phonetic += " Delta";
                break;
            case 'E': case 'e': phonetic += " Echo";
                break;
            case 'F': case 'f': phonetic += " Foxtrot";
                break;
            case 'G': case 'g': phonetic += " Golf";
                break;
            case 'H': case 'h': phonetic += " Hotel";
                break;
            case 'I': case 'i': phonetic += " Indiana";
                break;
            case 'J': case 'j': phonetic += " Juliet";
                break;
            case 'K': case 'k': phonetic += " Kilo";
                break;
            case 'L': case 'l': phonetic += " Lima";
                break;
            case 'M': case 'm': phonetic += " Mike";
                break;
            case 'N': case 'n': phonetic += " November";
                break;
            case 'O': case 'o': phonetic += " Oscar";
                break;
            case 'P': case 'p': phonetic += " Papa";
                break;
            case 'Q': case 'q': phonetic += " Quebec";
                break;
            case 'R': case 'r': phonetic += " Romeo";
                break;
            case 'S': case 's': phonetic += " Sierra";
                break;
            case 'T': case 't': phonetic += " Tango";
                break;
            case 'U': case 'u': phonetic += " Uniform";
                break;
            case 'V': case 'v': phonetic += " Victor";
                break;
            case 'W': case 'w': phonetic += " Whiskey";
                break;
            case 'X': case 'x': phonetic += " X-Ray";
                break;
            case 'Y': case 'y': phonetic += " Yankee";
                break;
            case 'Z': case 'z': phonetic += " Zulu";
                break;
            default: cout << "You did not enter a letter." << endl;
        }
        count++;
    }
    cout << "Phoenetic version is:" << phonetic << endl;

    return 0;
}

( примечание: рассмотрите возможность использования word.at(count) вместо word[count] для включения проверки границ при индексировании отдельных символов - здесь вы в безопасности с word.length(), но в целом .at() обеспечивает, что дополнительный уровень проверки)

Пример использования / Вывод

$ ./bin/icaophonetic
Enter a word: apple
Phoenetic version is: Alpha Papa Papa Lima Echo

Посмотрите это и дайте мне знать, если у вас есть вопросы.

...