先放上一段代码
- #include<stdio.h>
- #include<stdlib.h>
- #defineNMEMB50
- #defineSIZE10
- intcompar(constvoid*a,constvoid*b)
- {
- return(strcmp((char*)a,(char*)b));
- }
- intmain()
- {
- chardata[NMEMB][SIZE]={"Linux","freebsd","solzris","sunos","windows"};
- charkey[80],*base,*offset;
- inti,nmemb=NMEMB,size=SIZE;
- for(i=1;i<5;i++)
- {
- fgets(key,sizeof(key),stdin);
- key[strlen(key)-1]='/0';
- base=data[0];
- offset=(char*)lfind(key,base,&nmemb,size,compar);
- if(offset==NULL)
- {
- printf("%snotfound!/n",key);
- offset=(char*)lsearch(key,base,&nmemb,size,compar);
- printf("Add%stodataarray/n",offset);
- }
- else
- {
- printf("found:%s/n",offset);
- }
- }
- return0;
- }
这段代码主要实现了两个简单的搜索函数lfind和lserch.
运行结果
- [root@localhostroot]#./a
- hello
- hellonotfound!
- Addhellotodataarray
- windows
- found:windows
- aaa
- aaanotfound!
- Addaaatodataarray
- hello
- 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"}这几个中的一个元素大小的意思,一般设置为最大的元素的大小即可。