编写函数int delnum(int a[ ] , int n , int num),实现在长度是n的数组a中,删除值为num的元素。删除后数组的中剩余数据的个数作为函数的返回值返回。注意,num在数组中可能不只一个。
从数据中删除一个数,所做的操作是该元素后面的数据全部前移一个存储位置。例如:
长度为10的数组中存储10个数据:2,2,5,8,3,1,4,7,9,2,删除2,则数组中剩余有效数据长度为8,依次为5,8,3,1,4,7,9
#include
#include
#define N 20
int delnum(int p[],int n,int num)
{
int nlen,i,j;
nlen=n;
for(i=0;i<nlen;i++)
{
if(p[i]==num)
{
for(j=i;j<nlen;j++)
p[j]=p[j+1];
nlen--;
}
}
return nlen;
}
int main()
{
int a[N],num,len,i;
for(i=0;i<N;i++)
printf("%d ",a[i]);
puts("");
printf("Please input delete num:");
scanf("%d",&num);
len=delnum(a,N,num);
for(i=0;i<len;i++)
printf("%d ",a[i]);
puts("");
return 0;
}
你的数组都还没有初始化,你在main函数里就把它输出了,
#include
#define N 10
int delnum(int p[], int n, int num)
{
int nlen, i, j;
nlen = n;
for (i = 0; i<nlen; i++)
{
if (p[i] == num)
{
for (j = i; j < nlen; j++)
{
p[j] = p[j + 1];
}
nlen--;
i = -1; //使循环从i=0开始
}
}
return nlen;
}
int main()
{
int a[N], num, len, i;
for (i = 0; i<N; i++)
scanf("%d ", a[i]);
puts("");
printf("Please input delete num:");
scanf("%d", &num);
len = delnum(a, N, num);
for (i = 0; i<len; i++)
printf("%d ", a[i]);
puts("");
return 0;
}
int delnum(int p[], int n, int num)
{
int *pData = new int[n];
pData = p;
int nLen = 0;
for (int i = 0;i < n;i ++)
{
if (p[i] != num)
{
p[nLen ++] = pData[i];
}
}
return nLen;
}
减少for循环次数的写法。。。