【问题标题】:Converting a morse string into an array of chars将莫尔斯字符串转换为字符数组
【发布时间】:2014-11-27 04:05:39
【问题描述】:

正如标题所述,这个程序的目的是将一串摩尔斯电码,例如.-/.-/.-,放入一个字符数组中。我相信我几乎在那里,但是我需要能够将 morsecat 设置为空,因为我相信程序无法正确运行的原因是因为 morsecat 不断接收字符,并且在转换什么时在 morsecat 中保存为一个字符,它认为 morsecat 太长并且无法转换它,因为它不匹配任何 morse 字符,因为它包含两个或多个 morse 字符而不是一个(这就是为什么 do while 循环在那里“/”分隔每个莫尔斯字符)。 我附上了我的代码,但如果您认为这是它需要的,请随时对其进行大修。 任何帮助都将不胜感激,因为这让我有一段时间感到困惑。

注意:我知道当您尝试验证代码时,它会给出错误“空字符常量”,因为我不知道如何重置 morsecat 的值以使其不包含任何内容。

以下程序的代码:

char * ip = ".-/.-/";
char buf[50];
int buflen;

char morse2char (char * m) {
  if (strcmp(m, ".-") == 0) {
    Serial.println("a");
  }
  else  if (strcmp(m, "-...") == 0) {
    Serial.println("b");
  }
  else if (strcmp(m, "-.-.") == 0) {
    Serial.println("c");
  }
  else if (strcmp(m, "-..") == 0) {
    Serial.println("d");
  }
  else if (strcmp(m, ".") == 0) {
    Serial.println("e");
  }
  else if (strcmp(m, "..-.") == 0) {
    Serial.println("f");
  }
  else if (strcmp(m, "--.") == 0) {
    Serial.println("g");
  }
  else if (strcmp(m, "....") == 0) {
    Serial.println("h");
  }
  else if (strcmp(m, "..") == 0) {
    Serial.println("i");
  }
   else if (strcmp(m, ".---") == 0) {
    Serial.println("j");
  }
  else if (strcmp(m, "-.-") == 0) {
    Serial.println("k");
  }
  else if (strcmp(m, ".-..") == 0) {
    Serial.println("l");
  }
 else if (strcmp(m, "--") == 0) {
    Serial.println("m");
  }
 else if (strcmp(m, "-.") == 0) {
    Serial.println("n");
  }
 else if (strcmp(m, "---") == 0) {
    Serial.println("o");
  }
 else if (strcmp(m, ".--.") == 0) {
    Serial.println("p");
  }
 else if (strcmp(m, "--.-") == 0) {
    Serial.println("q");
  }
 else if (strcmp(m, ".-.") == 0) {
    Serial.println("r");
  }
 else if (strcmp(m, "...") == 0) {
    Serial.println("s");
  }
  else if (strcmp(m, "-") == 0) {
    Serial.println("t");
  }
  else if (strcmp(m, "..-") == 0) {
    Serial.println("u");
  }
  else if (strcmp(m, "...-") == 0) {
    Serial.println("v");
  }
  else if (strcmp(m, ".--") == 0) {
    Serial.println("w");
  }
  else if (strcmp(m, "-..-") == 0) {
    Serial.println("x");
  }
  else if (strcmp(m, "-.--") == 0) {
    Serial.println("y");
  }
  else if (strcmp(m, "--..") == 0) {
    Serial.println("z");
  }
 else if (strcmp(m, "/") == 0) {
  Serial.println(" ");
}
}
char * charstring2morsestring(char * ip, char * buf, int buflen){
  char backslash = '/';
  char * currentchar;
  int i;
  char  morsecat[buflen];
  //morsecat[0] = '\0';
  char * temp;
  for(i=0;i<strlen(ip);i++){


    do {

    *temp = ip;
    strcat(morsecat, temp);
    //Serial.println(morsecat);


    } while (ip != '/');

    if (ip == '/') {
    *currentchar = morse2char(morsecat);
    strcat(buf, currentchar);
    morsecat[buflen] = ' ';
    }





      }


Serial.println(buf);   
  }










void setup(){
  Serial.begin(9600);
  //Serial.println(morse2char(".-"));
  //Serial.println(morse2char("-..."));
  //Serial.println(morse2char("--.."));
  charstring2morsestring(".-/-.../--../.", buf, 50);

}


void loop(){


}

【问题讨论】:

  • 我不完全理解你的问题解释,但一些数组和循环会使你的 if 链更短。
  • 您应该考虑一种算法,该算法是基于每个“点”或“破折号”进行解码的树(不要忘记 . 是 ..- 中的第一个)。
  • 考虑这棵树learnmorsecode.com
  • 在循环中使用 strtok() 分解莫尔斯字符串的方式更容易完成。您也不需要传入 buf 或 buflen。

标签: c arrays string arduino


【解决方案1】:

这看起来不像c 代码。但是,从逻辑的角度来看,首先你应该

  1. *temp = ip;错了,可能你要的是temp = ip;
  2. (ip != '/'); 您不能使用 == 进行字符串比较。使用strcmp()
  3. *currentchar = morse2char(morsecat); 但我看不到 morse2char() 返回任何内容。

你的代码中还有很多逻辑问题,比如无效的do..while循环等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2017-11-27
    相关资源
    最近更新 更多