#include <iostream>
using namespace std;
int main()
{
int size = 0, new_size=0, zero_streak = 0;
cout << "Input length of an array: ";
cin >> size;
double *arr = new double[size];
double* arr2{ new double[size] };
cout << "\nInput elements of an array:\n";
for (int index = 0; index < size; index++)
{
cin >> arr[index];
}
for (int index = 0; index < size; index++)
{
if (arr[index] == 0) {
++zero_streak;
if (zero_streak == 1 || zero_streak == 0)
{
arr2[index]=arr[index];
++new_size;
}
}
else if (arr[index] != 0)
{
arr2[index] = arr[index];
++new_size;
zero_streak = 0;
}
}
cout << "\nNew array looks like this:\n";
for (int index = 0; index < new_size; index++)
cout << arr2[index] << " ";
delete[] arr;
delete[] arr2;
return 0;
}
所有的结构看起来都没问题,但问题是当元素被复制到新数组时,第一个零后面的其他连续零会抛出未知值。
此外,第一个数组的最后一个元素不会复制到第二个数组。
有什么建议可以解决这个问题吗?
2条答案
按热度按时间wgeznvg71#
我们对arr和arr2都使用了index,但是需要一个单独的index来跟踪arr2中的新位置,因为得到的字符串长度是不同的:下面是经过修正和简化的for循环:
这意味着“1 0 0 0 1”的输入变为“1 0 1”,“0 0 1 0 0”变为“0 1 0”
t2a7ltrp2#
你似乎具备了一切必要的要素,让我们来看看其中的逻辑。
这可以更简洁地写成:
您可以在这里使用代码:https://godbolt.org/z/qqz7z89bq