所以我有一个叫做jogo的结构和一个包含jogo类型变量的数组。
结构。
typedef struct
{
int id;
char nome[1024];
char equipas[2][1024];
int pont[2];
} jogo;
我想做的是通过二进制搜索找到对应的nome,并在找到nome后返回其id。
例子:我想做的是二进制搜索,找到对应的nome,并在找到nome后返回其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()
搜索前。
对了,那些1KB的数组要求动态分配内存(我的看法)。