C 速查手冊

標準程式庫 stdlib.hbsearch()

stdlib.h函數 (function) bsearch() 在已排序的陣列 (array) 中進行二元搜尋 (binary search) ,共需五個參數 (parameter) 。第一個參數為搜尋目標數值的指標 (pointer) ,第二個參數為搜尋的已排序陣列,第三個參數為排序陣列的數目,第四個參數為利用 sizeof 計算搜尋目標所佔的記憶體空間,第五個參數為函數指標,須自行定義排序陣列的排序比較方式。 bsearch() 回傳指向搜尋項目的指標,若沒有搜尋到則回傳 NULL

以下程式利用函數 bsearch() 搜尋字串 test1test2 的第一個字元是否為母音

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *s1, const void *s2);

int main(void)
{
    char *vowel = "AEIOUaeiou";
    char *test1 = "thesaurus";
    char *test2 = "Apple";
    char *ptr;
    
    ptr = bsearch(test1, vowel, 10, sizeof(*test1), cmp);    
    if (ptr) {
        printf("%s的第一個字母是母音...\n", test1);
    }
    else {
        printf("%s的第一個字母不是母音...\n", test1);
    }
    
    ptr = bsearch(test2, vowel, 10, sizeof(*test2), cmp);    
    if (ptr) {
        printf("%s的第一個字母是母音...\n", test2);
    }
    else {
        printf("%s的第一個字母不是母音...\n", test2);
    }
   
    return 0;
}

int cmp(const void *s1, const void *s2)
{
    return *(char *)s1 - *(char *)s2;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:cbsearch.c
    功能:示範 stdlib.h 中函數 bsearch() 的使用
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc cbsearch.c
$ a.out
thesaurus的第一個字母不是母音...
Apple的第一個字母是母音...
$

回 C 速查手冊 - 標準程式庫分類索引
回 C 速查手冊 - 標準程式庫導覽
回 C 速查手冊首頁