程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//先判断有几个元素等于elem,即需调用几次removeElement
int same_elem(int A[],int n,int elem)
{
int i=0;
//统计几次相等
int num=0;
for(i=0;i<n;i++)
{
if(elem==A[i])
num++;
}
return num;
}
//移除函数
int removeElement(int A[], int n, int elem,int m)
{
int i=0,j=0;
for(i=0;i<n;i++)
{
if(elem==A[i])
{
for(j=i;j<n;j++)
A[j]=A[j+1];
A[n]='\0';
break;
}
}
n=0;
i=0;
printf("\n第%d次删除后数组为:\n\n",m+1);
while(A[i]!=0)
{
printf("arr[%d]=%d\t",i,A[i]);
n++;
i++;
}
printf("\n");
return n;
}
//清空缓存函数
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
//主函数
int main()
{
int i=0, n=0,num=0,m=0;
//elem要删除的元素,index剩下的数组长度
int elem=0,index=0;
printf("先输入动态数组的长度: ");
scanf("%d", &n);
int* arr = (int *)calloc(n,sizeof(int));
printf("\n输入%d个整数给数组赋值\n\n",n);
//给数组赋值
for(i = 0; i < n; i++)
scanf("%d",&arr[i]);
//给数组最后加上结束符
arr[n]='\0';
//清除输入超过n长度的数字,避免后续误读入存进elem中
safe_flush(stdin);
// getchar();
//输出该数组的元素值
printf("\n初始数组为:\n\n");
for(i = 0; i < n; i++)
printf("arr[%d]=%d\t",i,arr[i]);
//输入需要删除的元素
printf("\n\n请输入要删除的元素值: ");
scanf("%d",&elem);
//调用函数判断数组中有几个需要删除的元素
num=same_elem(arr,n,elem);
//调用移除函数计算剩下的数组长度
if(num!=0)
{
index=n;
for(i=0;i<num;i++)
{
index=removeElement(arr,index,elem,m);
m++;
}
printf("\n删除元素后的数组长度为: %d\n\n",index);
}
else
{
printf("\n该元素不在数组内.\n\n");
exit(0);
}
//释放堆内存
free(arr);
//将arr指向NULL,避免通过arr不当使用已经释放的内存
arr=NULL;
return 0;
}