试图将莫尔斯电码转换为英语。 奋斗的

我正在尝试创建一个函数来从一个文件中读取摩尔斯电码,将其转换为英文文本,将转换后的文本打印到终端,然后将其写入输出文件。 这是一个艰难的开始……
#define TOTAL_MORSE 91 #define MORSE_LEN 6

 void morse_to_english(FILE* inputFile, FILE* outputFile, char morseStrings[TOTAL_MORSE][MORSE_LEN]) { int i = 0, compare = 0; char convert[MORSE_LEN] = {'\0'}, *buffer = '\0'; //read in a line of morse string from file // fgets(buffer, //then what? while(((convert[i] = fgetc(inputFile)) != ' ') && (i < (MORSE_LEN - 1))) { i++; } if (convert[i + 1] == ' ') convert[i + 1] = '\0'; //compare read-in string w/morseStrings for (i = 48, compare = strcmp(convert, morseStrings[i]); //48 is '0' i < (TOTAL_MORSE - 1) && compare != 0; i++) { compare = strcmp(convert, morseStrings[i]); } printf("%c", (char)i); } 

我已经将morseStrings初始化为摩尔斯电码。 那是我现在的function。 它不起作用,我不确定采取什么方法。

我原来的算法计划是这样的:
1. Scan Morse code in from file, character by character, until a space is reached
1.1 save to a temporary buffer (convert)
2. loop while i < 91 && compare != 0

  compare = strcmp(convert, morseString[i]) 

3. if (test ==0) print ("%c", i); 4. loop through this until eof

但是..我似乎无法想出一个好方法来测试文件中的下一个字符是否是空格。 所以这对我来说非常困难。

我非常沮丧并用谷歌搜索想法,并发现了使用这种算法的建议

  1. 读一行
  2. -strchr()用于在空格到另一个字符串之前的SPACE或EOL -copy字符
    – 使用strcmp()和循环查找字母 – 测试SPACE的下一个字符。
    – 如果是这样,输出另一个空格-Skip到下一个莫尔斯字符

  3. 项目清单

ENDLOOP

但是,这种循环有点令人困惑。 我会使用fgets()(我认为),但我不知道在长度参数中放什么。

无论如何,我很累,很沮丧。 对于这个问题,我将不胜感激。 如有必要,我可以提供更多代码。

你原来的计划看起来很好。 但是,当您在缓冲区中检查' '时,您将被1关闭。 它在convert[i] ,而不是convert[i + 1] 。 检测到空格时,不会发生循环内的i++

我不会使用strchr()来复杂化。

  1. 循环读取一行的Inputfile
  2. 使用[strtok] [1]标记化行
  3. 循环遍历令牌并将单个字母保存(最佳附加)到缓冲区
  4. 关闭looops和打印

对你来说有点伪代码

 while(there is a next line){ tokens = strtok(line); int i = 0; while(tokens hasnext){ save to buffer}} 

如果你担心CPU时间,你可以写一个查找表来查找值,像这样的开关:

 case '.-': code = "A"; break; case '-...': code = "B"; break; case '-.-.': code = "C"; break; 

用空格分割摩尔斯电码后发送不同的信息。 和 – 组合到开关以获得原始字符。

我希望这有帮助。 最好的祝福。