(2) array of sturct/string: lfind lsearch and insert

来源:互联网 发布:阿里巴巴直接传淘宝 编辑:程序博客网 时间:2024/06/05 02:31



#include<stdio.h>#include<stdlib.h>#include<search.h>#include<string.h>/* * void *lfind(const void *key, const void *base, size_t *nmemb,              size_t size, int(*compar)(const void *, const void *));   if found      return the pointer   else      return NULL   //========================================   void *lsearch(const void *key, void *base, size_t *nmemb,              size_t size, int(*compar)(const void *, const void *));   if found      return the pointer   else      insert the key at the end of array_list, and return the pointer*/struct city{int rank;char *name;};typedef struct city city_t;city_t china_city[] = {{1, "shanghai"},{2, "beijing"},{3, "shenzhen"},{4, "tianjin"},{5, "chongqing"},{6, "chengdu"},{7, "wuhan"},{8, "xian"}};int compare(const void* city1, const void* city2){return strcmp(((city_t *)city1)->name, ((city_t *)city2)->name);}int main(int argc, char **argv){size_t SIZE = sizeof(china_city)/sizeof(china_city[0]); //size_t is important!printf("SIZE = %d\n", SIZE);//================================city_t key;key.name  = "tianjin";city_t *find = (city_t *)lfind(&key, china_city, &SIZE, sizeof(city_t), compare);if(find)printf("found! rank = %d, name = %s\n", find->rank, find->name);elseprintf("not found.\n");//================================city_t key2 = {32, "luoyang"};find = lsearch(&key2, china_city, &SIZE, sizeof(city_t), compare);if(find)printf("found! rank = %d, name = %s\n", find->rank, find->name);elseprintf("not found.\n");printf("now, SIZE = %d\n", SIZE);return 0;}


原创粉丝点击