详细讲解:C语言删除数组中的某一值的所有元素

2023-10-19 21:50

本文主要是介绍详细讲解:C语言删除数组中的某一值的所有元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

具体要求是这样的,通过键盘向程序输入数组中需要删除的数字,程序接到输入后删除数组中所有需要删除的数字。例如:

数组 a[10]={1,2,4,6,4,8,6,2,6,7}
删除数字 :6 
输出结果:1 2 4 4 8 2 7

想要实现这个功能,其基本思想其实很简单:检索数组,如果遇到与输入值相同的元素,则删除该元素。至于删除数组中的元素,就只需要把数组从中断处挨个往前移一位就好了。

但数组中要是出现多个相同的数字,就需要我们进行进一步的考虑了,元素的下标问题。
思路如下:
首先使用for循环对数组进行遍历,当遇到数组元素与需要删除的数字相同时,从该处起,将下标+1.假设我们输入的数字为:6,用for循环的变量i来遍历数组,则情况如下:

输入:x 为 6
下标  0 1 2 3 4 5 6 7 8 9     
元素  1 2 4 6 4 8 6 2 6 7
当i = 3 时,x = a[i] = 6,则数组a[10]从下标3开始,依次+1直到a[8](数组中第九个元素),即:下标  0 1 2 3 4 5 6 7 8 | 9     i = 3
元素  1 2 4 4 8 6 2 6 7 | 7

可以看见数组中第一个6已经消失了,因为数组最高下标就是a[9],所以a[9] 不能再+1,因此我们的+1操作最多只加到a[8].
因为 a[9] 的值已经赋给了 a[8],所以a[9] 已经可以舍去(否则就会重复),所以目前数组中有效部分是a[0]-a[8]九个元素。

当i = 5 时,x = a[i] = 6,则数组a[10]从下标5开始,依次+1直到a[7](数组中第八个元素),即:下标  0 1 2 3 4 5 6 7 | 8 9     i = 5
元素  1 2 4 4 8 2 6 7 | 7 7

数组中第二个6也消失了,数组的有效部分为a[0]-a[7]八个元素。

当i = 6 时,x = a[i] = 6,则数组a[10]从下标6开始,依次+1直到a[6](数组中第七个元素),即:下标  0 1 2 3 4 5 6 | 7 8 9     i = 6
元素  1 2 4 4 8 2 7 | 7 7 7

至此,数组中的所有的6都已经被删除了,留下了从 a[0]到a[6] 七个有效元素。
因此我们打印时只需要打印前面7位就可以了,不难看见,减去的这几位正好是 “6” 出现的次数,因此我们只需要再设置一个标记,每次要求删除的数字出现时就自+1,最后输出时用数组长度减去这个标记数字,就能把有效的元素全部输出了。

转换成代码就是:

#include<stdio.h>
#include<string.h>
int main()
{ int n,sum=0; //设置标记统计被删除数字的出现次数int a[10]={1,2,4,6,4,8,6,2,6,7};printf("\nthe array is:");for(int i=0;i<10;i++){printf("%d",a[i]);   //遍历数组}printf("\nplease insert a number:");scanf("%d",&n);for(int i= 0;i<10;i++){if(n==a[i]){	++sum;  //如出现,则下标自加1for(int j=i;j<10-sum;j++) //仅对有效部分元素进行自加{a[j]=a[j+1]; }}}printf("the answer  is :\n");for(int i=0;i<10-sum;i++)  //仅输出有效部分{printf("%d",a[i]);}
}

这样就完成了。一开始做这个例子的时候总是输出不正确,后面自己按照程序运行过程写了一下就搞清楚了。所以有时候大家要是不知道为什么会出现莫名其妙的结果时,不妨试着自己画画图,很多就是就是一个数字的差别。

运行结果

虽然这个例题很简单,但我觉得要是把其中的细节弄明白,对我们以后的编程也是很有好处的,至少我觉得又提升了一些对程序的理解。细节决定成败,大家加油!

这篇关于详细讲解:C语言删除数组中的某一值的所有元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242597

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的