在c中将摩尔斯电码转换为英语

标签 c pointers loops malloc morse-code

我已经完成了一些代码,但它无法正确运行

到目前为止我做了什么

void keyread1(void)
{
    char *string1= (char*) malloc (20);//char pointer pointing to allocated memory
    char *string2= (char*) malloc (20);
    char *string3= (char*) malloc (20);
    char *string4= (char*) malloc (20);
    string4[0]='\0';
    printf("Enter word to convert to morse code: \n");
    scanf("%s", string1);
    while (string1!='\0')
    {
        int z=0,a=0;
        strncpy(string2+a, string1+z,4 );
        string3=morse2english(string2);
        strncat(string4+a,string3,1);
        z=z+4;
    }
    printf("morse code string: %s\n",string4);
    free(string1);
    return;
}

char *morse2english(char *morsecode)
{
    int j=0;
    int a=0;
    char *azarray=(char*)malloc(26);
    strcpy(azarray, "abcdefghijklmnopqrstuvwxyz");
    char *morsearray=(char*)malloc(104*sizeof(char));
    strcpy(morsearray, ".-  -...-.-.-.. .   ..-.--. ......  .----.- .-..--  -.  --- .--.--.-.-. ... -   ..- ...-.-- -..--.----..");
        for (int i = 0; i < 104; ++i )
    for(int j=0;j<4;j++)
    if((morsecode[j++] == morsearray[i++]))
    a =((morsearray[i-4])/4);
    char *ch =(char*)malloc(1*sizeof(char));
    ch=azarray+a;
    return ch;
}

函数 keyread 应该将莫尔斯电码字符串分割成 4 个字符 并将其传递给 morse2english 函数,该函数应该找到莫尔斯电码的字母表示形式 并将其返回给 keyread 函数并将其添加到 string4

最佳答案

我将问题放在评论中,但问题太多了!您确实需要回去研究更多 - 特别是关于动态内存分配!

在 keyread1 中:

  • 所有带有 malloced 缓冲区的 strcpy 内容都是不必要的。例如:你为 string3 malloc 20 个字节,但在使用它之前你说 string3=...,所以这是一个即时泄漏!
  • while(string1 != '\0') 不是比较苹果与苹果:字符串 1 是一个指针,\0 是一个字符。您可能指的是 *string1,但您永远不会修改 string1,因此循环不会结束。
  • 您永远不会在循环中修改 a,因此您不会附加到字符串4
  • morse2english 的结果是动态分配的,但您永远不会释放它。

摩尔斯电码英语:

  • 您 malloc 一个 26 的数组(不允许空终止符,因此缓冲区溢出)
  • 你永远不会释放 azararray - 为什么 malloc 首先,你不修改它,所以字符串文字可以工作。
  • 对于 morsearray 也是如此(我没有算,但你没有改变它,所以不需要 malloc 和 strcpy)
  • for 循环似乎是乱码:对于所有莫尔斯电码中的每个单独的字符,查看输入(并修改 for 循环使用的索引)

关于在c中将摩尔斯电码转换为英语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13415907/

相关文章:

c - GCC 找不到指定 -I 选项的头文件

可以通过编程方式中断系统调用吗?

c - 飞思卡尔 t4240qds : Serial Rapidio API

c - 如何从我的自定义队列中取出元素

python - 在 python 循环中计算数字

java - 使用 while 循环弹跳球,我需要将每次弹跳减少 30% 直到 0,然后退出循环以避免无限循环

arrays - 如何检查数组中的所有值是否相同?

c++ - .net c++/cli 获取指针的内容

c - 使用整数归档数组的范围问题

asp.net - 遍历文本框和标签