用C++实现:删除数组零元素

问题描述:

从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。

输入格式:

第一行输入一个整数,代表数组中有多少个数,第二行输入数组的元素。

输出格式:

第一行输出不为0的元素个数,第二行输出不为0的元素。

测试样例1:

输入:

5

3 4 0 0 2

输出:

3

3 4 2(3 4 2是以空格隔开的3个数)

测试样例2:

输入:

3

0 0 0

输出:

0

测试样例3:

输入:

7

0 0 7 0 0 9 0

输出:

2

7 9

思路:直接对整个数组进行遍历,遇到0就把0后面的元素往前移,然后减少数组的元素个数。

代码如下:

1 #include<iostream> 2 using namespace std; 3 int CompactIntegers(int *arr,int n) 4 { 5 //直接从头到尾遍历整个数组,是0就将n减1,同时数组下表往前移 6 for (int i = 0; i < n; i++) 7 { 8 if (arr[i] == 0) 9 { 10 //将所有元素向前移 11 int j = i; 12 for (; j < n - 1; j++) 13 { 14 arr[j] = arr[j + 1]; 15 } 16 //将要判断的元素的下标前移 17 i = i - 1; 18 //非0元素个数减1 19 n--; 20 } 21 } 22 return n; 23 } 24 25 int main(void) 26 { 27 int n; 28 cin >> n; 29 int* arr = new int[n]; 30 for (int i = 0; i < n; i++) 31 { 32 cin >> arr[i]; 33 } 34 int t = CompactIntegers(arr, n); 35 cout << t << endl; 36 if (t == 0) 37 { 38 return 0; 39 } 40 else 41 { 42 for (int i = 0; i < t - 1; i++) 43 { 44 cout << arr[i] << " "; 45 } 46 cout << arr[t - 1]; 47 } 48 return 0; 49 }

 


__EOF__

本文作者神楽桜KaguraSakura
本文链接https://www.cnblogs.com/KaguraSakura/p/13583437.html
关于博主:hello~好久不见,喜欢的话点个赞吧
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神楽桜KaguraSakura  阅读(3095)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示