作为编程新手,我有一个问题给你的人,
为了没有任何特定目的,我想知道我是否从用户那里拿出2个数组,而不是将它们放在一个单独的数组中,我怎样才能避免在后一个数组中使用2个相同的字符?
为了澄清,让我们说用户输入“sea”和“blue”作为2个单独的数组,
如何将它们组合在一个数组中,如“s,e,a,b,l,u”而不是“C,e,a,b,l,u,e”中的C编程语言? / p>
答案 0 :(得分:1)
我希望你不要用逗号分隔目标数组中的字符。
这是一个例子
#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
。
答案 1 :(得分:0)
做类似的事情:
int is_in_array(char *str, char c)
{
int i;
i = 0;
while (str[i] != '\0')
{
if (str[i] == c)
return 1;
i++
}
return 0;
}
int arraySize(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
i++;
return i;
}
int add_array(char *str1, char *str2)
{
int i;
int j;
int size;
char *str_all;
size = arraySize(str1) + arraySize(str2);
str_all = malloc(size * sizeof(str_all*));
while (str1[i] != '\0')
{
str_all[i] = str1[i];
i++;
}
j = 0;
while (str2[i] != '\0')
{
if (is_in_array(str1, str2[j]) == 0)
{
str_all[i] = str2[j];
i++;
}
j++;
}
}