作为一名编程新手,我有一个问题要问你们,
出于没有任何特定目的,我想知道我是否从用户那里获取了 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/