将文本翻译成摩尔斯电码,不确定如何实现所需的输出
Translating text to Morse , not sure how to achieve required output
需要将文本翻译成莫尔斯码以完成作业。
莫尔斯码的输出格式需要像这样 ".../---/... "space" .../---/..."
在 words 之间有一个 space ,在字符之间有一个 / 。但是 / 不能在单词的开头或结尾。
我的输出像这样 " .../---/.../ "space" /.../---/.../ " 显然失败了。
我确信有一个简单的修复方法,但我似乎崩溃了,请帮忙。
// Morse alphabet array
String morse [28] = {
".-",
"-...",
"-.-.",
"-..",
".",
"..-.",
"--.",
"....",
"..",
".---",
"-.-",
".-..",
"--",
"-.",
"---",
".--.",
"--.-",
".-.",
"...",
"-",
"..-",
"...-",
".--",
"-..-",
"-.--",
"--..",
" "
};
// Alphabet array
char letters [27] = {
'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',
' '
};
// Translates a text char to a morse char
String char2Morse (char a) {
int b = tolower (a);
for (int index = 0; index < 28; index ++) {
if ( b == (letters [index])) {
return (morse [index]);
}
}
}
// Translates a text string into Morse
String word2Morse (String wordy) {
String returnstring = "";
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
returnstring += ('/');
}
return returnstring ;
}
这里的关键是理解你什么时候需要在字符后添加一个 /
。当前,在 word2Morse
的 for 循环内,您在翻译每个字符后添加 /
。
但是,您实际上不希望在单词前后添加 /
。但是,您不能告诉程序不要在单词前后添加斜线,因为它不知道什么是单词。相反,您需要找到更简单的逻辑。
假设您正在尝试翻译以下单词:hello world
前 5 个字符翻译得很好。但是,如果不对您的代码进行任何更改,您将在第一个 o
之后添加一个斜线,这不是您想要的。
但是你为什么不想要在 o
之后加一个斜杠呢?因为它是一个词的结尾。你怎么知道的?这是因为下一个字符是 space.
现在,这是您可以解释的逻辑:如果下一个字符是 space![=,您不需要斜杠74=]
所以回到你的 for 循环:
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
returnstring += ('/');
}
您可以在将 /
添加到字符串之前添加该逻辑:
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
if (wordy[i+1] != ' ') {
returnstring += ('/');
}
}
现在,如果当前字符后有 space,则永远不会添加斜线。
但是,在 space 之后和字母 w
之前,您会遇到类似的问题。但是再一次,您可以在这里形成类似的逻辑:如果您当前的字符是 space![=74=,您不需要斜杠]
这次我不会把代码写出来,因为这应该是你的作业。但实质是在该 if 语句中添加更多布尔测试。
然而,还有一件事需要注意,那就是当你接近句子的结尾时。翻译完最后一个字符 d
后,它会再次尝试检查下一个字符是否为 space。但是,之后您没有其他角色。并试图检查它会以错误告终。所以在那个 if 语句中,你还想检查你是不是在最后一个字符!
另一件需要注意的事情是你可能不想写出像这样的东西:
char letters [27] = {
'a',
'b',
'c',
'd',
⋮
⋮
这太重复了,你不觉得吗?相反,如果 myChar
是 'g'
,您可以通过 myChar - 'a'
获得一个数字,这会给您 6
.
所以对于大多数 char2Morse
,你可以这样做:
String char2Morse(char a) {
char lower_a = tolower (a);
return morse[lower_a - 'a'];
}
这里唯一要注意的是你不能用 space 字符来做,这可以用 if 语句来测试:
String char2Morse(char a) {
if (a == ' ') {
return morse[27];
}
else {
return morse[tolower(a) - 'a'];
}
}
需要将文本翻译成莫尔斯码以完成作业。 莫尔斯码的输出格式需要像这样 ".../---/... "space" .../---/..." 在 words 之间有一个 space ,在字符之间有一个 / 。但是 / 不能在单词的开头或结尾。 我的输出像这样 " .../---/.../ "space" /.../---/.../ " 显然失败了。 我确信有一个简单的修复方法,但我似乎崩溃了,请帮忙。
// Morse alphabet array
String morse [28] = {
".-",
"-...",
"-.-.",
"-..",
".",
"..-.",
"--.",
"....",
"..",
".---",
"-.-",
".-..",
"--",
"-.",
"---",
".--.",
"--.-",
".-.",
"...",
"-",
"..-",
"...-",
".--",
"-..-",
"-.--",
"--..",
" "
};
// Alphabet array
char letters [27] = {
'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',
' '
};
// Translates a text char to a morse char
String char2Morse (char a) {
int b = tolower (a);
for (int index = 0; index < 28; index ++) {
if ( b == (letters [index])) {
return (morse [index]);
}
}
}
// Translates a text string into Morse
String word2Morse (String wordy) {
String returnstring = "";
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
returnstring += ('/');
}
return returnstring ;
}
这里的关键是理解你什么时候需要在字符后添加一个 /
。当前,在 word2Morse
的 for 循环内,您在翻译每个字符后添加 /
。
但是,您实际上不希望在单词前后添加 /
。但是,您不能告诉程序不要在单词前后添加斜线,因为它不知道什么是单词。相反,您需要找到更简单的逻辑。
假设您正在尝试翻译以下单词:hello world
前 5 个字符翻译得很好。但是,如果不对您的代码进行任何更改,您将在第一个 o
之后添加一个斜线,这不是您想要的。
但是你为什么不想要在 o
之后加一个斜杠呢?因为它是一个词的结尾。你怎么知道的?这是因为下一个字符是 space.
现在,这是您可以解释的逻辑:如果下一个字符是 space![=,您不需要斜杠74=]
所以回到你的 for 循环:
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
returnstring += ('/');
}
您可以在将 /
添加到字符串之前添加该逻辑:
for (int i = 0; i < wordy.length (); i ++) {
returnstring += (char2Morse (wordy[i]));
if (wordy[i+1] != ' ') {
returnstring += ('/');
}
}
现在,如果当前字符后有 space,则永远不会添加斜线。
但是,在 space 之后和字母 w
之前,您会遇到类似的问题。但是再一次,您可以在这里形成类似的逻辑:如果您当前的字符是 space![=74=,您不需要斜杠]
这次我不会把代码写出来,因为这应该是你的作业。但实质是在该 if 语句中添加更多布尔测试。
然而,还有一件事需要注意,那就是当你接近句子的结尾时。翻译完最后一个字符 d
后,它会再次尝试检查下一个字符是否为 space。但是,之后您没有其他角色。并试图检查它会以错误告终。所以在那个 if 语句中,你还想检查你是不是在最后一个字符!
另一件需要注意的事情是你可能不想写出像这样的东西:
char letters [27] = {
'a',
'b',
'c',
'd',
⋮
⋮
这太重复了,你不觉得吗?相反,如果 myChar
是 'g'
,您可以通过 myChar - 'a'
获得一个数字,这会给您 6
.
所以对于大多数 char2Morse
,你可以这样做:
String char2Morse(char a) {
char lower_a = tolower (a);
return morse[lower_a - 'a'];
}
这里唯一要注意的是你不能用 space 字符来做,这可以用 if 语句来测试:
String char2Morse(char a) {
if (a == ' ') {
return morse[27];
}
else {
return morse[tolower(a) - 'a'];
}
}