Я работал над программой, которая должна конвертировать английский в азбуку Морзе. Мне действительно тяжело иметь дело со струнами. Например, я понятия не имею, почему у morseAlphabet есть установленное количество позиций в [30], но я не могу сделать то же самое для latinAlphabet. В общем, я понятия не имею, как я должен переводить слова.
Моя идея состояла в том, чтобы увидеть, какой символ в алфавите появляется в первой позиции фразы, которую нужно перевести, затем напечатать соответствующую позицию алфавита для азбуки Морзе, а затем перейти на вторую позицию в фразе, однако я возился с циклами for. со мной, получая ошибки о циклах, становящихся слишком большими и ошибках памяти, или просто дал мне пустое место.
С тем, что я имею сейчас, всякий раз, когда я ввожу переводимую фразу, она останавливается с ошибкой индекса вне диапазона, и некоторые из моих прежних попыток заставили ее вернуть неровность (места памяти?), И я действительно просто не в курсе. Я надеюсь, что это правильно, и кто-то может мне помочь, потому что последние четыре часа поиска в интернете не очень помогли мне, и, честно говоря, в данный момент я сомневаюсь, что какой-либо из написанных мною материалов вообще пригодится ,
#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;
}
Ошибка в вашем текущем коде — ошибочное использование 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
s с фигурным списком инициализации char
s {'A', 'B', ...}
, Либо измените его на {"A", "B", ...}
или измените тип latinAlphabet
в char[30]
и вы сможете сказать, инициализировать его как массив.
#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();
}