C泛型编程—查找

来源:互联网 发布:手机移动协同软件 编辑:程序博客网 时间:2024/06/05 19:09

《编程范式》中介绍的C的查找实现~

//正常字符串类型的查找char* lsearch(char* sour, char* elem,size_t len){assert(sour!=NULL);char* elemTemp;for (int i = 0; i < len; i++){ elemTemp = sour + i;if (strcmp(elemTemp, elem) == 0)return elemTemp;}return NULL;}//任意类型的查找,elemsize指定单个元素的大小void* lsearch(void* sour, void* elem, size_t len, size_t elemsize){assert(sour != NULL);void* elemTemp;for (int i = 0; i < len; i++){elemTemp =(char*)(sour)+i*elemsize;//获取第i个元素if (memcmp(elemTemp, elem,elemsize) == 0)return elemTemp;}return NULL;}//自定义比较函数void* lsearch(void* sour, void* elem, size_t len, size_t elemsize, int (*cmpfun)(void*, void*)){assert(sour != NULL);void* elemTemp;for (int i = 0; i < len; i++){elemTemp = (char*)sour+i*elemsize;if (cmpfun(elemTemp, elem))return elemTemp;}return NULL;}int cmpfun(void* vp1, void* vp2){char* s1 = *((char**)vp1);//这里获取值而非地址char* s2 = *((char**)vp2);return strcmp(s1,s2);};

eg: char *nodes[]={“Ab”,”F#”,”Bc”,”Gb”,”D”};

char* favnote = “Eb”;

char** found = lsearch(nodes,&favnote,5,sizeof(char*),cmpfun);