2014-12-14 5 views
0

Я работал над программой, которая должна конвертировать английский в код Морзе. Мне очень сложно заниматься струнами. Например, у меня нет подсказки, почему у меня может быть morseAlphabet с установленным числом позиций в [30], но я не могу сделать то же самое для latinAlphabet. В целом я понятия не имею, как я должен переводить слова.English to Morse Converter

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

Что я имею прямо сейчас, когда я ввожу фразу, которую нужно перевести, она приходит с остановкой с индексом вне диапазона, и некоторые из моих ранних попыток вернули мне смелость (ячейки памяти?), И я действительно просто из идеи. Я надеюсь, что это правильно сформулировано, и кто-то может мне помочь, потому что последние четыре часа интернет-поиска на самом деле мне не помогли и, честно говоря, я сомневаюсь, что какой-либо материал, который я написал, ,

#include <iostream> 
#include <string> 


int main() 
{ 
    int operatingMode = 0; 
    using namespace std; 
    std::string latinPhrase; 
    std::string morsePhrase; 
    std::string latinAlphabet = { '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', '.', ',' }; 
    std::string morseAlphabet[30] = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", ".-.-.-", "--..--" }; 
    std::string translatedMorsePhrase; 
    int wordSearch = 0; 


    std::cout << "Please select a mode of operation. " << endl; 
    std::cout << "Input 1 for English to Morse and 2 for Morse to English. " << endl; 

    std::cin >> operatingMode; 

    std::cout << "Your mode of operation is " << operatingMode << endl; 

    if (operatingMode == 1) 
    { 
     std::cout << "You have selected English to Morse." << endl; 
     std::cout << "Please enter the phrase you would like translated." << endl; 

     std::cin.ignore(); 
     std::getline(std::cin, latinPhrase); 
    } 

    for (int counter = 0; counter < 30; counter++) 
    { 
     for (unsigned i = 0; i<latinPhrase.length(); ++i) 
     { 
       if (latinPhrase.at(i) == latinAlphabet[i]) 
       { 
        cout << morseAlphabet[i]; 
       } 
     } 

     std::cout << "The translated phrase is: " << translatedMorsePhrase << " stop" << endl; 


    return 0; 
} 
+0

Условное обозначение Морзе имеет прописные буквы? Тому помог Джек с лошади. Это предложение требует заглавной буквы –

+0

Код Морзе находится во всех столицах. Вы правы, хотя, если я даю ввод как строчную букву, это не сработает. – Sebastian

+0

Код Морзе не имеет ни капиталов, ни нижнего регистра. просто указывая на одно из своих ограничений. –

ответ

0

Исправлена ​​ошибка в текущем коде ошибочное использование i, когда вы имеете в виду counter и неправильный порядок итераций. Это должно сделать трюк:

for (unsigned i = 0; i<latinPhrase.length(); ++i) 
    { 
     for (int counter = 0; counter < 30; counter++) 
     { 
       if (latinPhrase.at(i) == latinAlphabet[counter]) 
       { 
        cout << morseAlphabet[counter]; 
        break; 
       } 
     } 
    } 

Чтобы ответить на ваш вопрос о вашей проблеме с объявления и инициализации std::string latinAlphabet[30], вы пытаетесь инициализировать массив std::string с с рамно-Init-список char s {'A', 'B', ...}. Либо измените его на {"A", "B", ...}, либо измените тип latinAlphabet на char[30], и вы сможете сказать, что инициализируйте его как массив.

+0

Спасибо за помощь, он отлично работает сейчас. Также спасибо за объяснение – Sebastian

0
#include<iostream> 
#include<stdio.h> 
#include<string.h> 
#include <windows.h> 
#include<fstream> 
using namespace std; 
int main() 
{ 
// Beep(523,700); 
// Beep(0,400); 
// Beep(523,200); 
// Beep(523,200); 
// Beep(523,200); 
    char string[1000]; 
    cout << "Enter string : "; 
    gets(string); 

    int len; 
    len=strlen(string); 
    ofstream out("output.txt"); 
    ifstream in; 
    for(int i=0; i<len; i++) 
    { 
     switch(string[i]) 
     { 
      case 'a' : 
      case 'A' : 
       { 
        out << ".- "; 
        break; 
       } 
      case 'b' : 
      case 'B' : 
       { 
        out << "-... "; 
        break; 
       } 
      case 'c' : 
      case 'C' : 
       { 
        out << "-.-. "; 
        break; 
       } 
      case 'd' : 
      case 'D' : 
       { 
        out << "-.. "; 
        break; 
       } 
      case 'e' : 
      case 'E' : 
       { 
        out << ". "; 
        break; 
       } 
      case 'f' : 
      case 'F' : 
       { 
        out << "..-. "; 
        break; 
       } 
      case 'g' : 
      case 'G' : 
       { 
        out << "--. "; 
        break; 
       } 
      case 'h' : 
      case 'H' : 
       { 
        out << ".... "; 
        break; 
       } 
      case 'i' : 
      case 'I' : 
       { 
        out << ".. "; 
        break; 
       } 
      case 'j' : 
      case 'J' : 
       { 
        out << ".--- "; 
        break; 
       } 
      case 'k' : 
      case 'K' : 
       { 
        out << "-.- "; 
        break; 
       } 
      case 'l' : 
      case 'L' : 
       { 
        out << ".-.. "; 
        break; 
       } 
      case 'm' : 
      case 'M' : 
       { 
        out << "-- "; 
        break; 
       } 
      case 'n' : 
      case 'N' : 
       { 
        out << "-. "; 
        break; 
       } 
      case 'o' : 
      case 'O' : 
       { 
        out << "--- "; 
        break; 
       } 
      case 'p' : 
      case 'P' : 
       { 
        out << ".--. "; 
        break; 
       } 
      case 'q' : 
      case 'Q' : 
       { 
        out << "--.- "; 
        break; 
       } 
      case 'r' : 
      case 'R' : 
       { 
        out << ".-. "; 
        break; 
       } 
      case 's' : 
      case 'S' : 
       { 
        out << "... "; 
        break; 
       } 
      case 't' : 
      case 'T' : 
       { 
        out << "- "; 
        break; 
       } 
      case 'u' : 
      case 'U' : 
       { 
        out << "..- "; 
        break; 
       } 
      case 'v' : 
      case 'V' : 
       { 
        out << "...- "; 
        break; 
       } 
      case 'w' : 
      case 'W' : 
       { 
        out << ".-- "; 
        break; 
       } 
      case 'x' : 
      case 'X' : 
       { 
        out << "-..- "; 
        break; 
       } 
      case 'y' : 
      case 'Y' : 
       { 
        out << "-.-- "; 
        break; 
       } 
      case 'z' : 
      case 'Z' : 
       { 
        out << "--.. "; 
        break; 
       } 
      case ' ' : 
       { 
        out << "/"; 
        break; 
       } 
      case '0' : 
       { 
        out << "----- "; 
        break; 
       } 
      case '1' : 
       { 
        out << ".---- "; 
        break; 
       } 
      case '2' : 
       { 
        out << "..--- "; 
        break; 
       } 
      case '3' : 
       { 
        out << "...-- "; 
        break; 
       } 
      case '4' : 
       { 
        out << "....- "; 
        break; 
       } 
      case '5' : 
       { 
        out << "..... "; 
        break; 
       } 
      case '6' : 
       { 
        out << "-.... "; 
        break; 
       } 
      case '7' : 
       { 
        out << "--... "; 
        break; 
       } 
      case '8' : 
       { 
        out << "---.. "; 
        break; 
       } 
      case '9' : 
       { 
        out << "----. "; 
        break; 
       } 



     } 


    } 
     out.close(); 
     char ch; 
     in.open("output.txt"); 
     while(!in.eof()) 
     { 
      in>>ch; 
      if(ch=='.') 
      { 
       Beep(523,200); 
      } 
      else if(ch=='-') 
      { 
       Beep(523,700); 
      } 
      else if(ch==' ') 
      { 
       Beep(0,100); 
      } 
      else if(ch == '/') 
      { 
       Beep(0,400); 
      } 
     } 
     in.close(); 

}