C搜索函数

先放上一段代码

Code:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #defineNMEMB50
  4. #defineSIZE10
  5. intcompar(constvoid*a,constvoid*b)
  6. {
  7. return(strcmp((char*)a,(char*)b));
  8. }
  9. intmain()
  10. {
  11. chardata[NMEMB][SIZE]={"Linux","freebsd","solzris","sunos","windows"};
  12. charkey[80],*base,*offset;
  13. inti,nmemb=NMEMB,size=SIZE;
  14. for(i=1;i<5;i++)
  15. {
  16. fgets(key,sizeof(key),stdin);
  17. key[strlen(key)-1]='/0';
  18. base=data[0];
  19. offset=(char*)lfind(key,base,&nmemb,size,compar);
  20. if(offset==NULL)
  21. {
  22. printf("%snotfound!/n",key);
  23. offset=(char*)lsearch(key,base,&nmemb,size,compar);
  24. printf("Add%stodataarray/n",offset);
  25. }
  26. else
  27. {
  28. printf("found:%s/n",offset);
  29. }
  30. }
  31. return0;
  32. }

这段代码主要实现了两个简单的搜索函数lfind和lserch.

运行结果

Code:
  1. [root@localhostroot]#./a
  2. hello
  3. hellonotfound!
  4. Addhellotodataarray
  5. windows
  6. found:windows
  7. aaa
  8. aaanotfound!
  9. Addaaatodataarray
  10. hello
  11. found:hello

lfind和lsearch的函数原型基本上差不多,

所需头文件#include <stdlib.h>
函数功能线性搜索:利用线性搜索在数组中从头至尾一项项查找数据
函数原型void *lfind(const void *key,const void *base,size_t *nmemb,size_t size,int (*compar)(const void *,const void *);
函数传入值

key指向欲查找的关键数据的指针

base指向要被搜索的数组开头地址

nmemb代表数组的元素数量

size每一元素的大小

compar为一函数指针,数据相同时返回0,不相同则返回非0值

函数返回值找到关键数据则返回找到的该笔元素的地址,如果在数组中找不到关键数据则返回空指针(NULL)
备注lfind()与lsearch()不同点在于,当找不到关键数据时lfind()仅会返回NULL,而不会主动把数据加入数组尾端。如果lsearch()找不到关键数据时,会主动把该数据加入数组里

大致就是这几点,其中compar需要自己写下,大致意思就是比较两个数值是否相同,传地址的方式,而size参数实际上需要是欲被搜索数组中元素的大小,在上面程序中就是{"Linux","freebsd","solzris","sunos","windows"}这几个中的一个元素大小的意思,一般设置为最大的元素的大小即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值