我想创建一个函数来从一个文件中读取摩尔斯代码,将其转换为英文文本,将转换后的文本打印到终端,并将其写入输出文件。这里有一个粗略的开始...
#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的莫尔斯电码。 这是我现在的功能。它不起作用,我不确定采取什么方法。
我原来的算法的计划是这样的:
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
但..我似乎无法想到一个好办法以测试文件中的下一个字符是否为空格。所以这对我来说非常困难。
我很沮丧,一派的想法,并找到了一个建议,使用这种算法
- 阅读空间或EOL 线
环
-strchr() - 将空格前的字符复制到另一个字符串
- 使用strcmp()并循环查找字母 - 测试SPACE的下一个字符。
- 如果是这样,输出另一个空间 -Skip下一莫尔斯字符列表项
ENDLOOP
但是,这个循环是一种混乱。我会使用fgets()(我认为),但我不知道要在length参数中放置什么。
无论如何,我很累,很沮丧。我希望对此问题提供任何帮助或见解。如有必要,我可以提供更多代码。
我想你是指ASCII,而不是英文。例如,如果原始邮件是法文的,那么将摩尔斯电码转换为英文可能会非常困难。 :-) – 2010-11-16 15:23:36
Touché,好的先生。 – Nate 2010-11-16 20:44:49