我有两个数组,如果一个数字在一个数组中重复,我将两者中的相应位置设置为零。然后我想将它存储在一个单独的数组中,现在忽略那些零并复制其余的数组。但是现在,如果我尝试这个,它只是用零复制数组,任何想法?
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++;
}
答案 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中存储值。