皮皮网

皮皮网

【新闻app html源码】【mt4编程源码】【信息轰炸机源码】bsearch源码

时间:2024-12-28 19:32:01 分类:百科

1.bsearch 用法

bsearch源码

bsearch 用法

       c函数qsort()和bsearch()的用法

       使用qsort()排序 并 用 bsearch()搜索是一个比较常用的组合,使用方便快捷。

       qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )

       其中base是排序的一个集合数组,num是新闻app html源码这个数组元素的个数,width是一个元素的大小,comp是mt4编程源码一个比较函数。

       比如:对一个长为的数组进行排序时,int a[]; 那么base应为a,num应为 ,width应为 sizeof(int),comp函数随自己的命名。

       qsort(a,,sizeof(int ),comp);

       其中comp函数应写为:

       int comp(const void *a,const void *b)

       {

       return *(int *)a-*(int *)b;

       }

       是对一个二维数组的进行排序:

       int a[][2]; 其中按照a[i][0]的大小进行一个整体的排序,其中a[i][1]必须和a[i][0]一起移动交换。信息轰炸机源码

       qsort(a,,sizeof(int)*2,comp);

       int comp(const void *a,const void *b)

       {

       return ((int *)a)[0]-((int *)b)[0];

       }

       对字符串进行一个排序:

       char a[][];

       qsort(a,,sizeof(char)*,comp);

       int comp(const void *a,const void *b

       {

       return strcmp((char *)a,(char *)b);

       }

       对一个结构体进行排序:

       typedef struct str

       {

       char str1[];

       char str2[];

       }str,*stri;

       str strin[]={ 0};

       int compare(const void *a,const void *b)

       {

       return strcmp( ((str*)a)->str2 , ((str*)b)->str2 );

       }

       qsort(strin,total,sizeof(str),compare);

       而关于bsearch() ,他和qsort的用法基本一样,只是他的返回值是一个指向找到的单位元素的一个指针,另外他多了一个参数,村民信息系统源码是一个指向查找元素的一个指针。

       比如:从上面例子中的结构体数组中查找一个字符串:

       str *locate;

       char buffer[]="abc";

       locate=(str*)bsearch(buffer,strin,total,sizeof(str),com);

       int com(const void *a,const void *b)

       {

       return strcmp( (char*)a, ((str*)b)->str2 );

       }

       可以大致比较两个函数的类似和差别。

       例题:pku

       此题还应注意的智慧农业云平台源码地方是字典输入的结束设置,希望能提出更好的解决方法(测试通过后再告诉我)。

       例题源代码:

       #include<iostream>

       #include<cstring>

       using namespace std;

       typedef struct str{

       char s1[];

       char s2[];

       }str,*stri;

       str s[];

       int cmp(const void *a,const void *b){

       return strcmp( ((str *)a)->s2 , ((str *)b)->s2 );

       }

       int compare(const void *a,const void *b){

       return strcmp((char*)a,((str*)b)->s2);

       }

       int main(){

       int n=0;

       char tt[];

       while(1){

       gets(tt);

       if(strlen(tt)==0)break;

       int i=0,j=0;

       for(;tt[i]!=' ';i++)s[n].s1[i]=tt[i];

       s[n].s1[i]='\0';

       for(i++;tt[i]!='\0';i++,j++)s[n].s2[j]=tt[i];

       s[n].s2[j]='\0';

       n++;

       }

       qsort(s,n,sizeof(str),cmp);

       while(scanf("%s",tt)!=EOF){

       str * pItem;

       pItem = (str *)bsearch (tt, s, n, sizeof (str), compare);

       if(pItem!=NULL)

       puts(pItem->s1);

       else printf("eh\n");

       }

       return 0;

       }

       [size=4]