C - 合并两个字符串列表

标签 c list

我目前有这个算法:

char** mergeLists(char **a, char **b, int sizeA, int sizeB, int *lSize)
{
    char **list = malloc( sizeof(char *) );
    int pA = 0, pB = 0, listSize = 0;

    while (pA != sizeA && pB != sizeB)
    {
        list = realloc(list, sizeof(char *) * (++listSize) );

        if (strcmp(a[pA], b[pB]) < 0)
        {
            list[listSize-1] = a[pA];
            pA++;                
        }
        else
        {   
            list[listSize-1] = b[pB];
            pB++;   
        }    
    }

    *lSize = listSize;

    return list;
}

但它似乎有一些错误。我目前正在运行这个测试:

char *l1[6];
l1[0] = "a";
l1[1] = "b";
l1[2] = "c";
l1[3] = "d";
l1[4] = "e";
l1[5] = "f";

char *l2[6];
l2[0] = "aa";
l2[1] = "ba";
l2[2] = "ca";
l2[3] = "da";
l2[4] = "ea";
l2[5] = "fa";

int s;
char **l = mergeLists(l1, l2, 6, 6, &s);

int i = 0;
for(i = 0; i < s; i++)
    printf("%s\n", l[i]);

正在打印:

a
aa
b
ba
c
ca
d
da
e
ea
f

第二个列表的最后一项丢失。我认为这可能是 while 循环条件中的一些错误。

我会很感激一些帮助。谢谢。

最佳答案

您的代码只运行到任一列表的第一端。您需要在末尾再添加两个循环,以包含保留在列表中但尚未完全使用的值。

关于C - 合并两个字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753344/

相关文章:

c++ - 您可以在迭代时从 std::list 中删除元素吗?

c - 通过从中删除特定的行和列来缩小二维数组的大小

c - C 是否保证 32 位整数运算?

list - 方案:返回一个表达式的所有元素,可以使用car和cdr的任意组合得到

python - 如何在 python 中比较数据框中的两个字符串列表是否有任何匹配项以获得 True 或 False?

jQuery on click将div添加到 'list'的前面

c - C代码错误: expected identifier or ‘(’ before ‘free_node_t’

c - 查找 sizeof 字符串的指针数组

c - 如何将标准输入从 child 传输到 parent ?

c - 单次遍历中链表的中点?