迭代并加入char阵列

Iterate and join char arrays

本文关键字:char 阵列 迭代      更新时间:2023-10-16

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

如果我正确理解您:

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;

注意传递输入字符串的界限 - 如果one = "ji-hs",它只有6个字符(您声明的5个字符,以及最后一个''。样式字符串起作用)。如果仅存储6个元素,则尝试访问第9元素是没有意义的。您的for loops访问one[i]i范围为0-9的所有值 - 意味着它们也将访问one[9]

尝试在单个循环上使用模量函数来确定它是奇数还是偶数。模量基本上返回其剩余的论点。

由于所有奇数索引都应具有two的值,而所有索引都应具有one的值,因此您可以使用Modusus Operator的结果来确定从何处复制您的值。请注意,整数除法截断结果(SO 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];
}

它不会出于简单的原因而无法使用,请参阅您的代码并尝试了解您在做什么,您将Array 一个复制到>>均在第一个循环中,然后是您将数组将两个复制到第二个循环中,这就是为什么您没有获得所需的输出。

您可以尝试这种方式

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