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



#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);
	else
		printf("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);
	else
		printf("not found.\n");
	printf("now, SIZE = %d\n", SIZE);

	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值