我需要合并两个数组中的负数。所以我在做什么:向数组中添加所需的元素,然后尝试添加到<0的合并数组元素中。这是我的尝试代码:
int main()
{
int arr1[100], arr2[100], size1, size2, size, i, j, k, merge[200];
cout<<"Enter Array 1 Size : ";
cin>>size1;
cout<<"Enter Array 1 Elements : ";
for(i=0; i<size1; i++)
{
cin>>arr1[i];
}
cout<<"Enter Array 2 Size : ";
cin>>size2;
cout<<"Enter Array 2 Elements : ";
for(i=0; i<size2; i++)
{
cin>>arr2[i];
}
for(i=0; i<size1; i++)
{
if(arr1[i]<0)
{
merge[i]=arr1[i];
}
}
size=size1+size2;
for(i=0, k=size1; k<size && i<size2; i++, k++)
{
if(arr2[i]<0)
{
merge[k]=arr2[i];
}
}
cout<<"Now the new array after merging is :\n";
for(i=0; i<size; i++)
{
cout<<merge[i]<<" ";
}
}
编译后,我得到了错误的合并数组。它同时打印所有负数和所有正数(但随机数2084562等)。也许您知道哪里出了问题以及如何解决?
设置合并数组元素的2个循环中存在逻辑错误。每当值不为负时,它们就会跳过混合数组中的索引。跳过的值在打印时仍未初始化,因此从理论上讲它们可以是任何值(实际上是未定义的行为)。
解决此问题的一个示例可能是创建一个整数,该整数对合并数组集中的元素数量进行计数。例如:
int negativecount = 0;
for(i=0; i<size1; i++)
{
if(arr1[i]<0)
{
merge[negativecount++]=arr1[i];
}
}
size=size1+size2;
for(i=0; i<size2 && negativecount < size; i++)
{
if(arr2[i]<0)
{
merge[negativecount++]=arr2[i];
}
}
这样,您将跟踪已经存储的元素数量,并且所有元素都将正确设置。您可以使用以下命令打印它们:
for(i = 0; i < negativecount; ++i)
{
std::cout << merge[i] << " ";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句