#include<stdio.h>
main()
{int i,j,n;
int a[10];
printf("请输入需要删除的数:\n");
scanf("%d",&n);
printf("请输入10个元素的数组: \n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
if (a[i]==n)
for (j=0;i+j<9;j++)
a[i+j]=a[i+j+1];
for (i=0;i<10;i++)
printf("%5d",a[i]);
}
这个是我扥代码。。。
但是试了不行。。。。。。
望大虾帮忙修改下。。。
谢谢了
我没财富积分了
有了绝对追分!!!谢谢了
C语言删除数组指定元素的源代码如下:
#include <stdio.h>
main()
{
char s[80],c;
int j,k;
printf("\nEnter a string: ");
gets(s);
printf("\nEnter a character: ");
c=getchar( );
for(j=k=0;s[j]!= '\0';j++)
if(s[j]!=c)
s[k++]=s[j];
s[k]= '\0';
printf("\n%s\n",s);
system("pause");
}
扩展资料
自定义函数代码如下
function delarrayval2($arr,$v){
$keyarr = array_keys($arr, $v);
if(count($keyarr)){
foreach ($keyarr as $key) {
unset($arr[$key]);
}
}
return $arr;
}
只要将删除后的数据元素像前移动一位即可。
#include <stdio.h>// 删除长度为len的数组dat中索引为idx的元素。
void remove(int *dat, int *len, int idx)
{
(*len)--;
if (idx < 0 || idx >= *len)
return;
for (int i = idx; i < *len; i++)
dat[i] = dat[i+1];
}
void output(int *dat, int len)
{
for (int i = 0; i < len; i++)
printf("%d ", dat[i]);
printf("\n");
}
int main()
{
int a[10]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, len = 10;
remove(a, &len, 5);
output(a, len);
remove(a, &len, 2);
output(a, len);
return 0;
}
{
int i,j,n;
int a[10];
int k=0; //记录删除数据的个数
printf("请输入需要删除的数:\n");
scanf("%d",&n);
printf("请输入10个元素的数组: \n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<10;i++)
if (a[i]==n)
{
for (j=0;i+j<9;j++)
a[i+j]=a[i+j+1];
k++;//删除数据的个数加1
a[10-k] = 0; //清除最后一个已经前移过的数据
}
for (i=0;i<10-k;i++)//输出剩余的数据,后面的数据为0代表已经被删除的无意义数据,不必再输出了。
printf("%5d",a[i]);
}本回答被提问者采纳
a[i+j]=a[i+j+1];
这段不对
for(j =i; j <9; j++)
{
a[j] = a[j+1];
}追问
你们两位写的都一样。。。。
但是这个我也试过了。。。
不行
比如数组:
1 2 3 3 3 4 5 6 4 3
删除元素3,但是会出现结果还是有3!!!