数组复制零?

时间:2015-07-06 14:13:34

标签: c arrays

我有两个数组,如果一个数字在一个数组中重复,我将两者中的相应位置设置为零。然后我想将它存储在一个单独的数组中,现在忽略那些零并复制其余的数组。但是现在,如果我尝试这个,它只是用零复制数组,任何想法?

  for (i = 0; i < linect; i++) //searches array sets repeated points to zero
  {
        if (array1[i] == array1[i+1])
        {
            array1[i] = array1[i + 1] = 0;
            array2[i] = array2[i + 1] = 0;
        }
  }
  for (i = 0; i < linect; i++)
  {
      if (array1[i] > 0.5){
          fixarray1[i] = array1[i];
          fixarray2[i] = array2[i];
      }
  }
j = 0;
while (j <300){
printf("\n%f", fixarray2[j]);
j++;
}

2 个答案:

答案 0 :(得分:1)

所以当你说&#34;如果一个数字在一个数组中重复&#34;你的意思是,如果下一个索引中的数字与当前索引相同,或者整个数组中的数字是否重复?正如您的代码所示,您只是检查下一个重复值。

  for (i = 0; i < linect; i++)
  {
      if (array1[i] > 0.5){
          fixarray1[i] = array1[i];
          fixarray2[i] = array2[i];
      }
  }

只会在数组1中存在非零值的索引处将非零值复制到数组2中。因此,您实际上并未删除任何0值,而是仅仅创建另一个值数组fixarray2[i]array2[i]相同。如果你想跳过旧阵列中的所有零,你需要保留一个单独的计数器。

答案 1 :(得分:0)

在下面的循环中,只有当array1中的元素不为零时,才会将值存储在fixarray中,但即使元素为零,其索引也会递增。

for (i = 0; i < linect; i++)

{
      if (array1[i] > 0.5)
   {
      fixarray1[i] = array1[i];
      fixarray2[i] = array2[i];
   }
}

在此循环中,只有当array1中的值不为零时,fixarray的索引才会递增。这样的事情 -

int j=0;

for(i = 0; i < linect; i++)
 {
     if(array1[i]>0.5)
     {      
              fixarray1[j] = array1[i];
              fixarray2[j] = array2[i];
              j++;
     }
 }

仅当array1中的元素不为零时,才会在fixarray中存储值。