C++ Logo
C++二级在线二级在线
首页选择题程序题成为会员帮助其他科目

非负筛选器

请修改编辑器中的代码,完成以下功能:实现 IntArray 类的成员函数,删除数组中所有的负数,只保留非负数,且保留下来的元素相对顺序不变,同时把元素个数 counter 更新为剩下的非负数个数。 删除要在原数组上完成(不另开数组):先找到第一个负数的位置作为写入位置,再从它后面开始扫描,遇到非负数就搬到写入位置并把写入位置后移一格。 本题测试数据为 {3, -5, 2, -1, 0, -7, 8},程序不需要输入。 输出示例: Before: 3 -5 2 -1 0 -7 8 After: 3 2 0 8

#include "IntArray.h"
#include <iostream>
using namespace std;

IntArray::IntArray(int a[],int size):counter(size){
	for(int i=0;i<counter;i++) array[i]=a[i];
}

void IntArray::show() const { 
	for(int i=0;i<counter;i++) cout<<array[i]<<' ';
	cout << endl;
}

// 删除所有负数,只保留非负数。删除操作不破坏剩余元素原来的相对顺序
void IntArray::NonNegativeOnly(){	
	int to; // 用来指定移动非负数的目标位置

	for(to=0; to<counter && array[to]>=0; to++); // 寻找第一个负数,其位置作为存放非负数的起点位置
	if(to >= counter) return; // 如果没发现任何负数,结束处理,返回

	// 从第一个负数的下一个位置开始在数组尾部寻找非负数
	// 若找到,则将该处数据移动到 to 处,然后 to++
	
	//********333********
	
	
	
	
	
	//********666********
	counter = to; // 更新 counter(非负数的个数)
}

int main() {
    int arr[] = {3, -5, 2, -1, 0, -7, 8};
    IntArray ia(arr, 7);

    cout << "Before:\n";
    ia.show();

    ia.NonNegativeOnly();

    cout << "After:\n";
    ia.show();

    return 0;
}

控制台

调试终端

准备就绪