C代码,搜索功能

时间:2014-06-18 00:59:03

标签: c function search struct

目前我正在努力修改基本搜索功能。

好吧,我让它工作,并搜索列表包含的任何名称,但如果我想通过其名称的一部分搜索某些东西,例如,如果名称是香蕉,我输入Bana,它会给我香蕉。

搜索功能:

void * PesquisaProdutos(PLISTA v1, int(*compara)(), void* valor) {
    int i;
    for (i = 0; i < v1->posicao;i++)
    if ((*compara)(v1->cabeca[i], valor))
        return v1->cabeca[i];
    return NULL;
}

比较功能:

int cmpDescricaoProduto(PLISTAPRODUTOS p, char* nome) {
    return strcmp(p->Descricao, nome) == 0;
}

和主要部分:

printf("Insira o Nome: ");
            scanf("%s", &Descricao);
            getch();
            Pesquisar = PesquisaProdutos(&Produtos, cmpDescricaoProduto, Descricao);
            if (Pesquisar) printf("Descricao : %s", Descricao);
            else printf("Produto Inexistente");
            getch();
            break;

如果可能,我想听听一些想法,谢谢。

1 个答案:

答案 0 :(得分:3)

如果您只想查看字符串的前几个字符,可以使用strncmp。它允许您指定要检查的最大字符数。

所以:

strncmp ("banana", "ban", 3)

是真的。

或者你可以使用strstr 的另一个字符串中找到一个字符串:

ststsr ("banana", "an")

将返回指向字符串an中第一次出现banana的指针(本例中为第二个字符),如果不存在则返回NULL。

所以,你的比较函数就像(只取消你感兴趣的那个):

int cmpDescricaoProduto (PLISTAPRODUTOS p, char* nome) {
    // return strcmp (p->Descricao, nome) == 0;      // for exact match
    // return strncmp (p->Descricao, nome, 3) == 0;  // for close (3-char) match
    // return strstr (p->Descricao, nome) != NULL;   // for "contains" match
}

可能也是您环境中可用的其他字符串比较函数,例如不区分大小写的函数,但它们在技术上不属于ISO C标准。