问题是: "编写并测试以下从数组中删除项目的函数:
void removeAll(float a[], int& n, float x);
该函数删除数组前n个元素中出现的所有x,并通过删除的数字减少n的值。
我编写了一个代码,它的工作原理非常好。基本上,我使用Zero标记了用户想要删除的值,并且代码在遇到零时跳过打印。基本上我们不会从数组中删除该值,只是将其替换为其他值。如果用户在数组中输入零怎么办?那么其他零也将被跳过,我也不想要它们。我怎么能这样做?
这是我的代码:
不要在c ++中使用任何类,对象,向量,字符串或任何函数,就像js中的array.splice一样。
#include<iostream>
using namespace std;
void removeAll(float a[], int &n, float x)
{
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
a[i] = 0;
}
}
for (int i = 0; i < 10; i++)
{
if (a[i]!=0)
cout << a[i] << endl;
}
}
int main()
{
float a[10], x;
int n;
cout << "Enter values in array: \n";
for (int i = 0; i < 10; i++)
{
cin >> a[i];
}
cout << "Enter the value whose occurrence you want to remove from the array: ";
cin >> x;
cout << "Enter serial no. uptill which you want to remove the occurences";
cin >> n;
removeAll(a, n, x);
}
答案 0 :(得分:0)
如果你只是想在没有选择变量的情况下打印出数组,你可以用一个条件来完成:
void removeAll(float a[], int &n, float x)
{
for (int i = 0; i < n; i++)
{
if (a[i] == x)
{
// Don't print it
}
else
{
cout << a[i] << endl;
}
}
}
如果您想消除这些事件,我建议您将以下数字向前移动。我不会对它进行编码,但这是一个例子:
array: 2,3,4,5,3,7
number to remove: 3
1. Iterate through the array and find '3'
2. If you find one, move all elements on the right side on step to left:
2 3 4 5 3 7 => 2 4 5 3 7 X
^
2 4 5 3 7 X => 2 4 5 7 X X
^
3. Count how many times you have done step two and return the new length/new array
答案 1 :(得分:0)
要做到这一点,你需要做4件事:
n
的副本以保留要迭代的元素数量:int size = n
n
:i < size
n
语句中的值时递减if
for
- 循环(如果您要打印n
下的所有内容,但被替换的数字会在else
条件下执行此操作。)