c - 如何将 2 个数组合并为一个数组

标签 c arrays

作为一名编程新手,我有一个问题要问你们,

出于没有任何特定目的,我想知道我是否从用户那里获取了 2 个数组,然后将它们放在一个单独的数组中,如何避免在后一个数组中获取 2 个相同的字符?

为了澄清,假设用户输入“sea”和“blue”作为 2 个单独的数组,

如何将它们放在一个数组中,例如“s,e,a,b,l,u”而不是 C 编程语言中的“s,e,a,b,l,u,e”?

最佳答案

我希望您不要用逗号分隔目标数组中的字符。

这是一个例子

#include <stdio.h>
#include <string.h>

int main( void )
{
    char s1[] = "sea";
    char s2[] = "blue";
    char s3[sizeof( s1 ) + sizeof( s2 ) - 1];
    char *p, *q;

    strcpy( s3, s1 );
    p = s3 + strlen( s1 );

    for ( q = s2; *q; ++q )
    {
        if ( strchr( s1, *q ) == NULL )
        {
            *p++ = *q;
        }
    }

    *p = '\0';

    puts( s1 );
    puts( s2 );
    puts( s3 );

    return 0;
}

输出为

sea
blue
seablu

或者,如果您希望目标数组可以具有两个(或更多)源数组的唯一字符,则代码可以如下所示

#include <stdio.h>
#include <string.h>

int main()
{
    char s1[] = "sea";
    char s2[] = "blue";
    const char * a[] = { s1, s2 };
    char s3[sizeof( s1 ) + sizeof( s2 ) - 1];
    size_t i;
    char *p, *q;

    p = s3;

    for ( i = 0; i < sizeof( a ) / sizeof( *a ); i++ )
    {
        const char *q = a[i];
        for ( ; *q; ++q )
        {
            char *t = s3;

            while ( t != p && *t != *q ) ++t;
            if ( t == p )
            {
                *p++ = *q;
            }
        }
    }

    *p = '\0';

    puts( s1 );
    puts( s2 );
    puts( s3 );

    return 0;
}

输出将与上面相同。

考虑到如果您将使用零初始化目标数组,例如

char s3[sizeof( s1 ) + sizeof( s2 ) - 1] = { '\0' };

然后代替循环

while ( t != p && *t != *q ) ++t;

您可以像第一个演示程序一样使用函数strchr

关于c - 如何将 2 个数组合并为一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27358776/

相关文章:

c - 生成C项目的callview树

编译器能否在没有有关纯度的类型信息的情况下自动检测纯函数?

javascript - D3 将数据添加到 setInterval() 内的数组元素中以绘制分组条形图

php - 使用 PHP 将数组插入 MySQL 数据库

c - 我的内存管理哪里出了问题?

c - 交换链表中的 2 个节点

c - 当我们使用 pragma pack(1) 时会发生什么?

c++ - 奇怪的重新分配行为

javascript - 在单词数组中搜索单词

c - 如何将 IplImage 转换为 char 数组