C语言删除数组元素

一个具有10个元素的数组 1 3 3 2 5 1 1 5 6 6,删除相同元素后后变为 1 3 2 5 6,请大虾们帮下忙,最好给出全部程序,必须是删除法!
请给出更精确,简洁的算法,说明下,此程序百度和其它网上有很多答案但非最优化方案,我要的是能看的舒服的!凡采用CTRL+V/C方式的都不采纳。
请用自己的方法编!
满意加100分

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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-29
{
int i,j;
char str1[20]={0}, str[20]="abceeedeffffgggg",ch='a';
for (i=j=0;str[i]!='\0';i++)//str[i]!='\0',数组以'\0'结尾,意思是for只进行到数组末端.
{
if(str[i]!=ch)//如果没有遇到想要删除的字符,则将str[i]的字符放到str1[j]中,之后j++;如果遇到了,就跳过.这样就可以删除字符了.
str1[j++]=str[i];//我感觉应该新建一个str1数组或者字符串.
}
for(int q=0;q<20;q++)
cout<
评论
0
0
加载更多
第2个回答  2019-08-13
/*我写了两种方法!!!方法一*/
#include
int
main()
{
int
a[10]={1,3,3,2,5,1,1,5,6,6};
int
i,j,k,x=10;/*x为数组中无重复有效元素的个数*/
for(i=0;i
#define
flag
-1//此外定义了一个标识。把重复的无素赋值为此标识。
int
main()
{
int
a[10]={1,3,3,2,5,1,1,5,6,6};
int
b[10];//用于存储有无重复元素的数组。
int
i,j,x=10;//x为无重复有效元素个数
for(i=0;i<10;i++)
{
if(a[i]!=flag)//如果标识过了,就不比较了
{
for(j=i+1;j<10;j++)
{
if(a[i]==a[j]&&a[j]!=flag)
{
a[j]=flag;
x--;//标识一个重复项,有效无素减少一个
}
}
}
};
for(i=0,j=0;i<10;i++)//把非标识的元素,给数组b[];
{
if(a[i]!=flag)
{
b[j]=a[i];
j++;
}
};
for(i=0;i
评论
0
0
加载更多
第3个回答  2007-12-18
一个for loop来一个个调
里面加一个for loop用当前的和前面的一个个比~~一样就删掉~~然后n--;
第4个回答  2007-12-18
/*我写了两种方法!!!方法一*/

#include <stdio.h>
int main()
{
int a[10]={1,3,3,2,5,1,1,5,6,6};
int i,j,k,x=10;/*x为数组中无重复有效元素的个数*/
for(i=0;i<x;i++)
{
for(j=i+1;j<x;j++)
{
if(a[i]==a[j])
{
x--;//发现重复时减1
for(k=j;k<x;k++)//移动数组
{
a[k]=a[k+1];
}
j--;
}
}
}
for(i=0;i<x;i++)printf("%d",a[i]);
printf("\n");
return 0;
}

/******************************************************************************
* 再写一种方法!!!
*此方法是把所有重复的都标识出来,然后生成一个新的无重复元素的数组
*******************************************************************************/

#include <stdio.h>
#define flag -1//此外定义了一个标识。把重复的无素赋值为此标识。
int main()
{
int a[10]={1,3,3,2,5,1,1,5,6,6};
int b[10];//用于存储有无重复元素的数组。
int i,j,x=10;//x为无重复有效元素个数
for(i=0;i<10;i++)
{
if(a[i]!=flag)//如果标识过了,就不比较了
{
for(j=i+1;j<10;j++)
{
if(a[i]==a[j]&&a[j]!=flag)
{
a[j]=flag;
x--;//标识一个重复项,有效无素减少一个
}
}
}
};
for(i=0,j=0;i<10;i++)//把非标识的元素,给数组b[];
{
if(a[i]!=flag)
{
b[j]=a[i];
j++;
}
};
for(i=0;i<x;i++)printf("%d",b[i]);
printf("\n");
return 0;
}本回答被提问者采纳