#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
#include <string>
using namespace std;

int main()
{
    string text[39] = {"A","B","C","D","E","F","G","H","I","J","K","L","M",
                       "N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
                       "1","2","3","4","5","6","7","8","9","0","Stop",",","?"};
    string code[39] = {".-","-...","-.-.","-..",".","..-","--.","....","..",".---","-.-",".-..","--",
                       "-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",
                       ".----","..---","...--","....-",".....","-....","--....","---..","----.","-----",".-.-.-","--..--","..--.."};
    string English, Morse, output_string;
    int option, string_size = 0, location;
    char again = 'y', letter;

    while(again == 'y')
    {
        system("cls");
        cout << "1 - Encode(Text to Morse)\n";
        cout << "2 - Decode(Morse Code to Text)\n";
        cout << "3 - Display the Morse Code\n";
        cout << "4 - Quit\n";
        cout << "Enter 1,2,3 or 4:";
        cin >> option;
        cin.ignore(256,'\n');
        system("cls");

        switch(option)
        {
            case 1:
                cout << "\nEnter a string with multiple words to encode:";
                getline(cin, English);
                system("cls");

                cout << "\nThe target string to be translated is:" << "\n";
                cout << English << "\n";

                string_size = English.length();
                for(int n = 0; n <= string_size-1; n++)
                {
                    letter = (char)English.at(n);
                    if(letter != ' ')
                    {
                        for(int t = 0; t <=39; t++)
                        {
                            if(letter == text[t])
                            {
                                cout << code[t] << " ";
                                break;
                            }
                        }
                    }
                    else if(letter == ' ')
                    {
                        cout << "\n";

                    }
                }
                getch();
                break;    
        }
    }
}  

Я еще не закончил, но не знаю, почему не могу запустить if(letter == text[t]), там написано, что это ошибка. как я могу это исправить? И я понятия не имею, чтобы написать код Морзе на английском. как я могу узнать позицию массива, введенного пользователем?

Сообщение об ошибке:

ошибка: нет совпадения для 'operator ==' (типы операндов: 'char' и 'std :: string {aka std :: basic_string}') |

c++
0
郑伟驹 17 Апр 2016 в 08:58

3 ответа

Лучший ответ
for (int t = 0; t <= 39; t++)

У вас есть 39 элементов, начинающихся с нулевого индекса, поэтому ваш цикл должен увеличиваться (но не включая) 39

for (int t = 0; t < 39; t++)
{
    ...
}

Вы можете объявить временную строку, чтобы скопировать каждую букву в строку. Вам также необходимо убедиться, что текст написан в верхнем регистре:

letter = (char)English.at(n);
if (letter != ' ')
{
    for (int t = 0; t < 39; t++)
    {
        std::string temp;
        temp = toupper(letter);
        if (temp == text[t])
        {
            cout << code[t] << " ";
            break;
        }
    }
}
1
Barmak Shemirani 17 Апр 2016 в 07:29

Вы пытаетесь сравнить строки и char .

Вам нужно написать такой массив (если вы хотите использовать только символы):

char text[39] = {'A','B','C','D','E','F','G','H','I','J','K','L','M'};

И нет:

string text[39] = {"A","B","C","D","E","F","G","H","I","J","K","L","M"};
4
STF 17 Апр 2016 в 06:35

Если хотите, чтобы массив был строковым - используйте функцию strcmp () .

if(strcmp(text[t],letter)==0)
      {
        cout << code[t] << " ";
        break;
      }

Удачи!

0
STF 17 Апр 2016 в 06:34