c - 具有不同长度字符串的交错函数

标签 c pointers

我正在尝试构建一个函数,无论大小如何将两个字符串交织在一起(尽管可以假设它少于 100 个字符)并输出指向新字符串的指针。

char* interleaved(const char* s1, const char* s2){
    char *word = malloc (sizeof (char) * 100);
    const char *p = s1;
    const char *p2 = s2;
    int i = 0;
    while(*p != '\0' || *p2 != '\0'){
        if(i%2 == 0){
            word[i] = *p;
            p++;
        }
        if(i%2 == 1){
            word[i] = *p2;
            p2++;
        }
        i++;
    }
    if(*p == '\0'){
        while(*p2 != '\0'){
            word[i] = *p2;
            p2++;
            i++;
        }
    }
    if(*p2 == '\0'){
        while(*p != '\0'){
            word[i] = *p;
            p++;
            i++;
        }
    }
    word[i] = '\0';
    return word;
}

目前,如果两个字符串的长度相同,它会起作用,例如“dog”和“cat”将产生“dcoagt”,但如果字符串不均匀,例如“dogbird”和“cat”,我会得到“dcoagtb”,并且如果第二个字符串更长,我就得到“dcoagt”。在原始 while 循环之后,我的两个 if 语句一定有问题,但我不确定是什么问题,有人可以看看并帮助我吗?

干杯

最佳答案

第一个循环应该使用 && 而不是 ||

while(*p != '\0' && *p2 != '\0')

使用 && 会导致它在任一字符串用完后立即停止。使用 || 使其继续,直到两个 字符串都用完。这很糟糕,因为较短的字符串的指针会从末端直接跑到无人区。

关于c - 具有不同长度字符串的交错函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756566/

相关文章:

c - 用 __stdcall 替换 FAR 和 PASCAL

我可以在 C 语言的闪存中连接两个 #define 字符串吗?

将 int 指针转换为 char 指针

c - 如何在C中选择一个字符串数组?

无法在OpenGL上绘制三角形

c - NCurses 刷新

c - getc 函数产生段错误

c++ - C/C++ 中的指针编译但给出段错误

c - 初始化常量变量

c++ - TTF_RenderText_Solid 使我的 ram 增加到 2GB 并返回 NULL