如何对多次出现的情况进行二分查找?

问题描述 投票:0回答:2

我正在尝试对数组执行二分搜索,并且我必须找到所有出现的字符串。我尝试过

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);

我考虑过在我的结构“首字母缩略词”中添加一个布尔变量,但我不确定......
这不是作业。

c algorithm binary-search
2个回答
5
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.