C 将莫尔斯字符串转换为字符数组

C 将莫尔斯字符串转换为字符数组,c,arrays,string,arduino,C,Arrays,String,Arduino,正如标题所述,这个程序的目的是将摩尔斯电码串,例如。-/-/.-,输入到一个字符数组中。我相信我基本上在那里,但是我需要能够将morsecat设置为空,因为我相信程序不能正确运行的原因是morsecat不断地接收字符,当涉及到将morsecat中的内容转换为字符时,它发现morsecat太长,无法转换,因为它不匹配任何morse字符,因为它包含两个或多个morse字符而不是一个(这就是为什么do-while循环存在,因为“/”分隔每个morse字符)。 我已经附上了我的代码,但如果你认为这是它需

正如标题所述,这个程序的目的是将摩尔斯电码串,例如。-/-/.-,输入到一个字符数组中。我相信我基本上在那里,但是我需要能够将
morsecat
设置为空,因为我相信程序不能正确运行的原因是
morsecat
不断地接收字符,当涉及到将morsecat中的内容转换为字符时,它发现morsecat太长,无法转换,因为它不匹配任何morse字符,因为它包含两个或多个morse字符而不是一个(这就是为什么do-while循环存在,因为“/”分隔每个morse字符)。 我已经附上了我的代码,但如果你认为这是它需要的,请随时修改它。 任何帮助都将不胜感激,因为这让我难堪了一段时间

注意:我知道,当您尝试验证代码时,它会给出错误“空字符常量”,因为我不知道如何重置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(){


}
char*ip=“.-/.-/”;
char-buf[50];
内布弗伦;
char morse2char(char*m){
如果(strcmp(m,“.-”==0){
序列号。打印号(“a”);
}
否则如果(strcmp(m,“-…”==0){
序列号。打印号(“b”);
}
否则如果(strcmp(m,“-.-”==0){
序列号。打印号(“c”);
}
否则如果(strcmp(m,“-…”)==0){
序列号。打印号(“d”);
}
否则如果(strcmp(m,“.”=0){
序列号。打印号(“e”);
}
否则如果(strcmp(m,“…-”==0){
序列号。打印号(“f”);
}
否则如果(strcmp(m,“-”)==0){
序列号。打印号(“g”);
}
否则如果(strcmp(m,“…”)==0){
序列号println(“h”);
}
否则如果(strcmp(m,“…”)==0){
序列号。打印号(“i”);
}
else if(strcmp(m,“.-”==0){
序列号:println(“j”);
}
否则如果(strcmp(m,“-.-”==0){
序列号。println(“k”);
}
否则如果(strcmp(m,“.-…”)==0){
序列号。打印号(“l”);
}
else if(strcmp(m,“-”==0){
序列号。打印号(“m”);
}
否则如果(strcmp(m,“-”)==0){
序列号println(“n”);
}
else if(strcmp(m,“--”==0){
序列号。打印号(“o”);
}
否则如果(strcmp(m,“.-”==0){
序列号。打印号(“p”);
}
else if(strcmp(m,“-.-”==0){
序列号println(“q”);
}
否则如果(strcmp(m,“.-”==0){
序列号。打印号(“r”);
}
else if(strcmp(m,“…”==0){
序列号。打印号(“s”);
}
否则如果(strcmp(m,“-”==0){
序列号。打印号(“t”);
}
否则如果(strcmp(m,“…-”==0){
序列号。打印号(“u”);
}
else if(strcmp(m,“…-”==0){
序列号。打印号(“v”);
}
否则如果(strcmp(m,“.-”==0){
序列号。打印号(“w”);
}
否则如果(strcmp(m,“-…-”==0){
序列号.println(“x”);
}
else if(strcmp(m,“-.”-”==0){
序列号。打印号(“y”);
}
else if(strcmp(m,“-”)==0){
序列号println(“z”);
}
否则如果(strcmp(m,“/”==0){
Serial.println(“”);
}
}
char*charstring2morsestring(char*ip,char*buf,int buflen){
字符反斜杠='/';
字符*当前字符;
int i;
char morsecat[buflen];
//morsecat[0]='\0';
字符*温度;

对于(i=0;i这看起来不像是
c
代码。但是,从逻辑角度来看,首先应该

  • *temp=ip;
    是错误的,也许你想要的是
    temp=ip;
  • (ip!='/');
    不能对字符串comaprison使用
    =
    。请使用
  • *currentchar=morse2char(morsecat);
    但我无法识别
    morse2char()
    返回的任何内容

  • 在你的代码中还有更多的逻辑问题,比如无效代码<>…..而循环和全部.

    我不完全理解你的问题解释,但是一些数组和循环会使你的if链变短。你应该考虑一个基于每个“点”或“破折号”的树来解码的算法。(不要忘记A.是……的第一个)。考虑一下这个树,用一个循环中使用Strtok()来更容易地完成莫尔斯字符串。你不需要在BUF或BuffLin中传递。