如何执行多次出现的二进制搜索?

时间:2012-05-04 13:00:27

标签: c algorithm

我正在尝试对数组执行二进制搜索,我必须找到所有字符串的出现次数。我曾尝试使用bsearch,但我不知道该怎么做。

/* data structures */

typedef struct {
    char *name;
    char *value;
} acronym;

struct {
    acronym *tab;
    size_t size;
} acronymArray;

/* code */

char buf[256];
fgets(buf, sizeof buf, stdin);
for (size_t i = 0; i < acronymArray.size; ++i) 
       if (!strcmp(buf, acronymArray.tab[i].name)) 
           printf("Found: %s\n", acronymArray.tab[i].value);

 /* How to translate it with a binary search ?
    Of course my array was sorted with qsort previously */

我试过了,但它只适用于一次:

if ((k = bsearch(k, acronymArray.tab, acronymArray.size, sizeof *acronymArray.tab, compare)))
    printf("found : %s\n", k->value);

我想到了一个布尔变量到我的结构«首字母缩略词»,但我不确定...... 这不是作业。

非常感谢!

2 个答案:

答案 0 :(得分:5)

应该很简单:你用二进制搜索找到任何出现,然后从找到的事件中向前/向后看,直到找到 not 等于找到的项目(或直到找到序列结束)。所有出现的事件必须在排序列表中是连续的。

答案 1 :(得分:0)

我认为您应该发布所有代码。存储字符串的通常方式是使用哈希表或二叉树。