C++ 什么';摩尔斯电码转换成英文文本的功能是什么?
我想知道如何从摩尔斯电码返回文本。摩尔斯电码必须以这种格式读取…/--/。。。每个字符用“/”分隔。我认为您必须将每个代码拆分并存储在临时字符串中,然后找到其英文变量,然后重置临时字符串C++ 什么';摩尔斯电码转换成英文文本的功能是什么?,c++,function,c++11,C++,Function,C++11,我想知道如何从摩尔斯电码返回文本。摩尔斯电码必须以这种格式读取…/--/。。。每个字符用“/”分隔。我认为您必须将每个代码拆分并存储在临时字符串中,然后找到其英文变量,然后重置临时字符串 #包括 #包括 使用名称空间std; void displayMenu(); char menuChoice(); 字符串toMorse(char); 常量int NumChar=26; 字符串莫尔斯[纽卡]={ ".-", "-...","-.-.", "-..", ".", "..-.", "--.", "
#包括
#包括
使用名称空间std;
void displayMenu();
char menuChoice();
字符串toMorse(char);
常量int NumChar=26;
字符串莫尔斯[纽卡]={
".-", "-...","-.-.", "-..", ".", "..-.",
"--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-",
".--", "-..-", "-.--", "--.."
};
int main()
{
cout使用地图会更简单,但由于您已经拥有带有莫尔斯字母表的数组,您可以使用它。您可以使用std::find
在数组中查找莫尔斯并将其结果转换为字符:
#include <string>
#include <iostream>
#include <algorithm>
std::string morse[] = {".-", "-...","-.-.", "-..", ".", "..-.",
"--.", "....", "..", ".---",
"-.-", ".-..", "--", "-.",
"---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-",
".--", "-..-", "-.--", "--.."
};
char get_char(std::string m) {
auto it = std::find(std::begin(morse),std::end(morse),m);
if (it == std::end(morse)) return '0';
return 'a' + std::distance(std::begin(morse),it);
}
int main () {
std::cout << get_char("..-.") << get_char("---") << get_char("---");
}
PS:如果你正在寻找的函数应该是将一个完整的莫尔斯电码字符串转换成一个英文字符串,那么我误解了你的问题,它需要你方更多的输入。我建议你使用一个映射表,它是一个数组或std::vector
对:
struct Key_Value
{
const * morse;
char alpha;
};
struct Key_Value conversion_table[] =
{
{".", 'E'},
{"-", 'T'},
};
unsigned int size_conversion_table =
sizeof(conversion_table) / sizeof(conversion_table[0]);
如果您输入莫尔斯“单词”,您可以通过表格将单词与行的“莫尔斯”字段进行比较。如果存在匹配项,请使用alpha
字段获取字符
例如:
std::string morse_letter = ".";
bool found = false;
char english_letter = '*';
for (unsigned int i = 0; i < size_conversion_table; ++i)
{
std::string table_string = conversion_table[i].morse;
if (morse_letter == table_string)
{
english_letter = conversion_table[i].alpha;
found = true;
break;
}
}
std::string morse_letter=“.”;
bool-found=false;
字符英文字母='*';
for(无符号整数i=0;i
表查找的一个很好的特性是,您可以让代码为2个条目工作,然后添加更多条目,而无需更改代码
你可以使用相同的表格将英文字母映射到摩尔斯电码。这两个参数是什么?输入是一个带有摩尔斯电码的字符串,但字符是什么?
?有一个相当简单的方法来做这类事情。只需拿出一张空白纸,用简单的句子用简单的英语写下,一个ste当你的橡皮鸭同意你提出的行动计划后,只需把你写下来的东西直接翻译成C++。任务完成了。你考虑过使用<代码> STD::无序的地图>代码。字符串是莫尔斯代码,字符是CorrSp的英文字符。使用代码进行onds?这将大大减少代码。您已经有了用于映射的数组,可以使用std::find
并将其结果转换为所需的结果character@idclev463035818我不知道字符是什么,或者我的教授把它放在那里,但我想我不需要它。我知道使用地图更简单,但我的教授说我们只能使用给定的库。@JordanNorthup请看答案,我没有使用map@JordanNorthup它是std::find
返回的类型的简写,我认为它是一个字符串*
,但我必须查找它哦,好的,所以我要做的是读取莫尔斯电码像…/--/…(SOS)这样的短语让函数提取每个莫尔斯电码并找到对应的英文字母。但必须是莫尔斯电码必须使用/s作为分隔符输入。这是令人困惑的部分me@JordanNorthup什么让你困惑?你只需要使用/
作为分隔符来分割字符串,然后你就可以应用我在回答中写的内容了。(关于拆分,请参见此处:)我可以使用它,但我必须使用代码中提供的库。因此,请将struct
中的char
更改为'std::string'。
struct Key_Value
{
const * morse;
char alpha;
};
struct Key_Value conversion_table[] =
{
{".", 'E'},
{"-", 'T'},
};
unsigned int size_conversion_table =
sizeof(conversion_table) / sizeof(conversion_table[0]);
std::string morse_letter = ".";
bool found = false;
char english_letter = '*';
for (unsigned int i = 0; i < size_conversion_table; ++i)
{
std::string table_string = conversion_table[i].morse;
if (morse_letter == table_string)
{
english_letter = conversion_table[i].alpha;
found = true;
break;
}
}