一个具有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
加载更多
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
加载更多
#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--;
里面加一个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;
}本回答被提问者采纳
#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;
}本回答被提问者采纳