我有两个char数组,我试图逐个字符地加入。这是一个举例说明的例子:
both[10]
|
|______both[0]
|_____one[0]
|
both[1]
|_____two[0]
|
both[2]
|_____one[1]
|
..etc..
我尝试使用两个循环,但这对第二个数组不起作用。它可能很简单,虽然我没有找到解决方案。
char one = "ji-hs";
char two = "onti";
char both[10];
for (int i = 0; i < 10; ++i) {
memcpy(&both[i], &one[i], 1);
}
for (int i = 0; i < 10; ++i) {
memcpy(&both[i+1], &two[i], 1);
}
连接在一起的两个数组应该是join-this
答案 0 :(得分:2)
如果我理解正确的话:
char *one = "ji-hs";
char *two = "onti";
char both[11];
for (int i = 0; i < 5; i++) {
both[i*2] = one[i];
both[i*2+1] = two[i];
}
both[10] = 0;
答案 1 :(得分:1)
注意传递输入字符串的边界 - 如果one = "ji-hs"
,它只有6个字符(你声明的5个字符,最后加上'\0'
。看看如何c-样式字符串工作)。如果第一个地方只存储了6个元素,那么尝试访问第9个元素是没有意义的。您的for循环访问one[i]
i
的所有值(范围均为0-9) - 这意味着他们也可以访问one[9]
。
尝试在单个循环上使用模数函数来确定它是奇数还是偶数。模数基本上返回其参数除法的余数。
由于所有奇数索引都应具有two
的值,而所有偶数索引都应具有one
的值,因此您可以使用modusus运算符的结果来确定从中复制值的位置。请注意,整数除法会截断结果(所以5/2 = 2)
我还没有测试过这个,但它显示了基本的想法:
char one = "ji-hs";
char two = "onti";
char both[10];
for (int i = 0; i < 10; ++i) {
if (i % 2)
both[i] = two[i/2];
else
both[i] = one[i/2];
}
答案 2 :(得分:0)
由于简单的原因,它无法正常工作,请查看您的代码并尝试了解您正在做的事情,您正在将数组一个复制到两个的第一个循环中,然后是它是你在第二个循环中将数组两个复制到这两个中,这就是为什么你没有得到所需的输出。
你可以试试这种方式
int k=0,i=0,j=0,flag=1;
while(i<strlen(one) && j<strlen(two)) {
if(flag) {
memcpy(&both[k],&one[i],1);
k++; i++;
flag=0;
}
else {
memcpy(&both[k],&two[j],1);
k++; j++;
flag=1;
}
}
for(;i<strlen(one);i++)
memcpy(&both[k],&one[i],1);
for(;j<strlen(two);j++)
memcpy(&both[k],&two[j],1);