C语言,从数组中删除一个指定元素。

请不要复制网上的,那些都看了,没用。... 请不要复制网上的,那些都看了,没用。 展开
 我来答
小夏聊生活
高能答主

2019-12-07 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:447 获赞数:114613

向TA提问 私信TA
展开全部

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;

}

水瓶余念
2018-04-12 · TA获得超过2755个赞
知道小有建树答主
回答量:16
采纳率:0%
帮助的人:5097
展开全部

del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。

函数的原型为:
int del (int a[10],int n,int x)
(1)请实现这个函数,并完成测试。

[参考解答]

[cpp] view plain copy

  • #include<stdio.h>  

  • int del(int a[],int n, int x);  

  • int main( )  

  • {  

  • int a[20]= {86,76,62,58,77,85,92,80,96,88,77,67,80,68,78,87,64,59,61,76};  

  • int i, n;  

  • n = del(a, 20, 77);  

  • printf("剩余 %d 个:\n", n);  

  • for(i=0; i<n; i++)  

  • printf("%d ", a[i]);  

  • printf("\n");  

  • return 0;  

  • }  

  • int del(int a[],int n, int x)   //删除长度为n的a数组中值为x的元素  

  • {  

  • int p=0, q=0;  //用p和q两个变量  

  • while (q<n)    //由q控制,扫描所有的元素  

  • {  

  • if(a[q]!=x)    //只有当元素值不等于x才往p标识的位置上“搬”  

  • {  

  • a[p]=a[q];     

  • p++;      

  • }  

  • q++;     

  • }   //最后的效果,等于x的元素都没有“搬”过来,它们被“覆盖”了,也即被删除了  

  • return p; //p代表的,就是删除后的元素个数  

  • }  


  • (2)如果在函数调用时,要求数组中的元素呈升序排列呢?
  • [参考解答]

  • 思路:例如在下面main函数中的测试,删除77时,分三个阶段:①先找到77;②跨过若干个77后,找到了80;③从80开始,将数据逐个地搬到前面合适的位置(“覆盖”了77及随后的位置)。

  • [cpp] view plain copy

  • #include<stdio.h>  

  • int del(int a[],int n, int x);  

  • int main( )  

  • {  

  • int a[20]= {58, 59, 61, 62, 64, 67, 68, 76, 77, 77, 77, 80, 80, 85, 86, 87, 88, 88, 92, 96};  

  • int i, n;  

  • n = del(a, 20, 77);  

  • printf("剩余 %d 个:\n", n);  

  • for(i=0; i<n; i++)  

  • printf("%d ", a[i]);  

  • printf("\n");  

  • return 0;  

  • }  

  • int del(int a[],int n, int x)   //删除长度为n的a数组中值为x的元素  

  • {  

  • int p=0, q;  

  • while (a[p]<x && p<n)    //阶段①:先隔过所有小于x的元素,找到要删除元素的位置  

  • p++;  

  • q=p;    //阶段②:p将标记住这个待删除的位置  

  • while(a[q]==x && q<n)   //q接棒往前走,找到要保留的元素  

  • q++;  

  • while(q<n)  

  • a[p++]=a[q++];  //阶段③:将要保留的元素,直接“覆盖”到p标记住的位置,逐个赋值,结果就是将等于x的元素删除了  

  • return p; //p代表的,就是删除后的元素个数  

  • }  

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylcqucc
2014-12-24 · TA获得超过1436个赞
知道小有建树答主
回答量:862
采纳率:0%
帮助的人:335万
展开全部

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式