c - 在结构数组中进行二进制搜索
问题描述
所以我有一个名为 jogo 的结构和一个带有 jogo 类型变量的数组。
结构:
typedef struct
{
int id;
char nome[1024];
char equipas[2][1024];
int pont[2];
} jogo;
我想要做的是二进制搜索以找到相应的名称并在找到名称时返回其id。
例子:
// Example of elements inside the array
jogo array[3] = {{0,ElClassico1,Barcelona,RealMadrid,2,0},
{1,ElClassico2,Barcelona,RealMadrid,1,3},
{2,ElClassico3,Barcelona,RealMadrid,3,4}}
因此,例如,如果我对名称 ElClassico2 进行二进制搜索,我希望二进制搜索返回 1,它是该 jogo 的 id。
如果有人能告诉我如何做到这一点,我将不胜感激,因为我不明白如何做到这一点。
解决方案
如果要使用标准库二进制搜索,可以这样使用:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct
{
int id;
char nome[1024];
char equipas[2][1024];
int pont[2];
} jogo;
int jogo_compare_nome(void const *a, void const *b)
{
return strcmp(((jogo*)a)->nome, ((jogo*)b)->nome);
}
int main(void)
{
jogo array[3] = {
{0, "ElClassico1", {"Barcelona", "RealMadrid"}, { 2, 0}},
{1, "ElClassico2", {"Barcelona", "RealMadrid"}, { 1, 3}},
{2, "ElClassico3", {"Barcelona", "RealMadrid"}, { 3, 4}},
};
jogo j1 = { .nome = "ElClassico2" };
jogo j2 = { .nome = "ElClassico7" };
jogo* p;
p = bsearch(&j1, array, 3, sizeof(jogo), jogo_compare_nome);
if (p) {
printf("Found id=%i\n", p->id);
}
else {
printf("Not found!\n");
}
p = bsearch(&j2, array, 3, sizeof(jogo), jogo_compare_nome);
if (p) {
printf("Found id=%i\n", p->id);
}
else {
printf("Not found!\n");
}
return EXIT_SUCCESS;
}
无论如何,请记住二进制搜索需要按搜索键排序的序列(好的,按键分区,但这是挑剔的)。您可以qsort()
在搜索之前使用。
顺便说一句,那些 1 KB 的数组需要动态内存分配(我的观点)。
推荐阅读
- javascript - 通过箭头函数方法参数传递组件的值
- python - 如何为 django 模型 BooleanField 添加布尔按钮,以便普通用户可以将值设置为 true 或 false?
- python - 使用 BeautifulSoup 查找所有具有微小偏差的“ul”和“li”元素
- vuejs2 - vue router.push 未捕获(承诺)未定义
- azure - OauthPrompt 未导航到 Teams 上的登录页面
- python - 目录在不应该被拒绝时被拒绝
- tensorflow - 在图形模式下运行`defun`
- nlp - 使用 qunateda 包 rpart 在 R 中进行文本挖掘
- python - python代码将终止用户输入的另一个进程(例如chrome.exe)?
- go - 在 main 中找不到包