该计划的主要思想是将文本编码为莫尔斯,并将莫尔斯解码为文本。
但程序坏了,我不知道为什么当我在两个单词之间写空间时程序不起作用,我对代码和解码有这个问题。
OperationalContract
答案 0 :(得分:1)
可能还有其他一些问题,但至少你需要解决这个问题:
void encode_out(const char *s)
在此功能中,s
是一个输入参数,看起来您确定要修改其内容,因此s
不能拥有const
修饰符。将其更改为:
void encode_out(char *s)
在程序中查找具有类似问题的其他功能,例如decode_out
答案 1 :(得分:1)
char *text;
char *morse;
...
scanf("%s", &text);
encode_out(&text);
printf("Enter the morse code: ");
scanf("%s", &morse);
decode_out(&morse);
text
和morse
是指针,不添加引用运算符。
text
是未初始化的指针,不能在scanf
中使用。用法如下:
char text[100];
scanf("%s", text);
对于其余的代码,它不太可能工作并且过于复杂。使用翻译功能比较每个莫尔斯电码。
char translate(const char* buf)
{
for (int i = 0; i < 26; i++)
if (strcmp(buf, alpha[i]) == 0)
return 'A' + (char)i;
if (strcmp(buf, "/") == 0)
return ' ';
for (int i = 0; i < 10; i++)
if (strcmp(buf, num[i]) == 0)
return '0' + (char)i;
//to indicate an error:
return '?';
}
使用strtok
将莫尔斯代码分解为部分,翻译每个部分并添加到输出中:
char *decode(const char* src)
{
char *code = malloc(strlen(src) + 1);
char *dst = malloc(strlen(src) + 1);
strcpy(code, src);
int dst_len = 0;
char *token = strtok(code, " ");
while (token)
{
dst[dst_len++] = translate(token);
token = strtok(NULL, " ");
}
free(code);
dst[dst_len] = 0;
return dst;
}
int main(void)
{
char *dst = decode(".... . .-.. .-.. --- / .-- --- .-. .-.. -..");
printf("%s\n", dst);
free(dst);
return 0;
}
输出:"HELLO WORLD"