迭代并加入char数组

时间:2014-03-12 04:13:36

标签: c++ arrays join

我有两个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

3 个答案:

答案 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);