将文本翻译成摩尔斯电码,不确定如何实现所需的输出

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'];
    }
}