C语言如何从数组中删除一个指定元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何从数组中删除一个指定元素?相关的知识,希望对你有一定的参考价值。

请不要复制网上的,那些都看了,没用。

在JAVA中如何从数组中删除一个元素的程序如下:

package org.usc.action;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Test

public static void main(String[] args)

String[] str="张三","李四","王五","宋六","赵七","朱八","何九","田十";

List<String> list=Arrays.asList(str);//将数组转换为list集合

if(list.contains("张三"))

//加入集合中包含这个元素

///这个时候我们直接移除会报错,所以我们要转换为Arraylist

 //list.remove("张三");

List<String> arrayList=new ArrayList<String>(list);//转换为ArrayLsit调用相关的remove方法

arrayList.remove("张三");

for(String str1:arrayList )

System.out.print(str1+",");

部分解释:

1、remove这些method时出现java.lang.UnsupportedOperationException异常。

2、这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList, remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。

3、ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等, 所以throw UnsupportedOperationException。

扩展资料:

因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集。

Java允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。

异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。

参考技术A

del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。

函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。

[参考解答]

[cpp] view plain copy

    #include<stdio.h>  

    int del(int a[],int n, int x);  

    int main( )  

      

    int a[20]= 86,76,62,58,77,85,92,80,96,88,77,67,80,68,78,87,64,59,61,76;  

    int i, n;  

    n = del(a, 20, 77);  

    printf("剩余 %d 个:\\n", n);  

    for(i=0; i<n; i++)  

    printf("%d ", a[i]);  

    printf("\\n");  

    return 0;  

      

    int del(int a[],int n, int x)   //删除长度为n的a数组中值为x的元素  

      

    int p=0, q=0;  //用p和q两个变量  

    while (q<n)    //由q控制,扫描所有的元素  

      

    if(a[q]!=x)    //只有当元素值不等于x才往p标识的位置上“搬”  

      

    a[p]=a[q];     

    p++;      

      

    q++;     

       //最后的效果,等于x的元素都没有“搬”过来,它们被“覆盖”了,也即被删除了  

    return p; //p代表的,就是删除后的元素个数  

      


    (2)如果在函数调用时,要求数组中的元素呈升序排列呢?

    [参考解答]

    思路:例如在下面main函数中的测试,删除77时,分三个阶段:①先找到77;②跨过若干个77后,找到了80;③从80开始,将数据逐个地搬到前面合适的位置(“覆盖”了77及随后的位置)。

    [cpp] view plain copy

    #include<stdio.h>  

    int del(int a[],int n, int x);  

    int main( )  

      

    int a[20]= 58, 59, 61, 62, 64, 67, 68, 76, 77, 77, 77, 80, 80, 85, 86, 87, 88, 88, 92, 96;  

    int i, n;  

    n = del(a, 20, 77);  

    printf("剩余 %d 个:\\n", n);  

    for(i=0; i<n; i++)  

    printf("%d ", a[i]);  

    printf("\\n");  

    return 0;  

      

    int del(int a[],int n, int x)   //删除长度为n的a数组中值为x的元素  

      

    int p=0, q;  

    while (a[p]<x && p<n)    //阶段①:先隔过所有小于x的元素,找到要删除元素的位置  

    p++;  

    q=p;    //阶段②:p将标记住这个待删除的位置  

    while(a[q]==x && q<n)   //q接棒往前走,找到要保留的元素  

    q++;  

    while(q<n)  

    a[p++]=a[q++];  //阶段③:将要保留的元素,直接“覆盖”到p标记住的位置,逐个赋值,结果就是将等于x的元素删除了  

    return p; //p代表的,就是删除后的元素个数  

      

参考技术B // 写一个泛型方法可以适应大部份类型的需求。
// ----------------------------------------------
/**
* @param <T> 数组中的元素类型
* @param arrs 需要删除元素的数组。
* @param index 需要删除的元素的索引(出界时抛异常)。
* @return 指定类型的新数组。
*/
public static <T> T[] removeArrayItem(T[] arrs, int index)
int len = arrs.length;
if(index < 0 || index >= len)
throw new IllegalArgumentException("索引出界");

List<T> list = new LinkedList<T>();
for(int i = 0; i < len; i++)
if(i != index)
list.add(arrs[i]);


// 这里将改变传入的数组参数 arrs 的值
arrs = list.toArray(arrs);
return java.util.Arrays.copeOf(arrs, arrs.length - 1);

在JAVA中如何从数组中删除一个元素

1、打开myeclipse的主页以后,直接根据实际情况新建一个相关文件。

2、下一步,需要按照图示选择对应的代码进行添加。

3、这个时候如果没问题,就通过找到运行按钮来点击。

4、这样一来会得到相应的结果,即可在JAVA中从数组中删除一个元素了。

参考技术A

这样:

package com.yiibai;import java.util.ArrayList;public class RemoveArrayElement    public static void main(String[] args)

       ArrayList objArray = new ArrayList();

       objArray.clear();

       objArray.add(0, "0th element");

       objArray.add(1, "1st element")

       objArray.add(2, "2nd element");

       System.out.println("Array before removing an element" + objArray);

       objArray.remove(1);

       objArray.remove("0th element");

       System.out.println("Array after removing an element" + objArray);    

Java

扩展资料:

注意事项

在Java 语言中,具有两大类数据类型;首先是基础数据类型,另外还有的引用类型。Java 中有一种特殊的数组引用类型,它具有以下特性:

1、java 数组本身来说是一个引用类型,定义以及初始化之后数组的长度不再改变。

2、java 数组不变是说由array variable 所指向的内存中的数组不会发生变化,而该 array variable 可以灵活的指向别的存在于堆内存的其他数组。

由以上特性我们可以推测出想要删除原始数组中的特定元素不能简单的实现,以下方法是当输入的数组元素不重复时删除特定数组的简单实现:

public class ArrUtils

    private int[] arr;              

    public int[] getArr()   

        return arr;

        

    public void setArr(int[] arrList)   

        arr = arrList;

        

    public int[] delete(int target)   

    int[] middleArr = new int[arr.length];        

    int[] resultArr; 

    int k = 0,numOfTarget = 0;   

    for(int ele:arr)    

            if(ele != target)  

                middleArr[k] = ele; 

                k++;

            else           

                numOfTarget++;

           

      

        if(numOfTarget == 0)          

            resultArr = new int[ arr.length ];            

        else            

            resultArr = new int[arr.length - numOfTarget];

                

    int i = 0;        

        for(int j = 0;j < middleArr.length;j++)             

            if(middleArr[j] != 0)               

                resultArr[i] = middleArr[j];                

                ++i;

           

                

    return resultArr;

   

参考技术B

在JAVA中如何从数组中删除一个元素的程序如下:

package org.usc.action;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class Test

public static void main(String[] args)

String[] str="张三","李四","王五","宋六","赵七","朱八","何九","田十";

List<String> list=Arrays.asList(str);//将数组转换为list集合

if(list.contains("张三"))

//加入集合中包含这个元素

///这个时候我们直接移除会报错,所以我们要转换为Arraylist

 //list.remove("张三");

List<String> arrayList=new ArrayList<String>(list);//转换为ArrayLsit调用相关的remove方法

arrayList.remove("张三");

for(String str1:arrayList )

System.out.print(str1+",");

部分解释:

1、remove这些method时出现java.lang.UnsupportedOperationException异常。

2、这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList, remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。

3、ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(),add()等, 所以throw UnsupportedOperationException。

扩展资料:

因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集。

Java允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。

异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。

参考技术C // 写一个泛型方法可以适应大部份类型的需求。
// ----------------------------------------------
/**
* @param <T> 数组中的元素类型
* @param arrs 需要删除元素的数组。
* @param index 需要删除的元素的索引(出界时抛异常)。
* @return 指定类型的新数组。
*/
public static <T> T[] removeArrayItem(T[] arrs, int index)
int len = arrs.length;
if(index < 0 || index >= len)
throw new IllegalArgumentException("索引出界");

List<T> list = new LinkedList<T>();
for(int i = 0; i < len; i++)
if(i != index)
list.add(arrs[i]);


// 这里将改变传入的数组参数 arrs 的值
arrs = list.toArray(arrs);
return java.util.Arrays.copeOf(arrs, arrs.length - 1);
本回答被提问者采纳
参考技术D array.remove(array.get(1))这样子删。
把那个元素拿出来。remove掉就行。。也可以用索引

以上是关于C语言如何从数组中删除一个指定元素?的主要内容,如果未能解决你的问题,请参考以下文章

C语言在数组中快速找到指定的数的位置

c语言如何删除数组中的某个元素

C语言数组如何进行元素求和?

C语言 统计数组每个元素个数

c语言 从一个一维数组中删除指定数值

c语言中如何修改数组中的元素