使用c语言将代码文本转换为莫尔斯语

时间:2016-10-30 04:31:55

标签: c

该计划的主要思想是将文本编码为莫尔斯,并将莫尔斯解码为文本。

但程序坏了,我不知道为什么当我在两个单词之间写空间时程序不起作用,我对代码和解码有这个问题。

OperationalContract

2 个答案:

答案 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);

textmorse是指针,不添加引用运算符。

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"