C代码,搜索功能

标签 c function search struct

目前我正在努力尝试修改一个基本的搜索功能。

好吧,我让它工作了,并搜索列表中包含的任何内容的名称,但是如果我只想通过其名称的一部分来搜索某些内容,例如,如果名称是 Banana,并且我输入 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;

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

最佳答案

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

所以:

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

会是真的。

或者您可以使用 strstr 在另一个字符串的某处查找字符串:

ststsr ("banana", "an")

将返回指向字符串 banana 中第一次出现的 an 的指针(在本例中为第二个字符),如果不存在则返回 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 标准的一部分。

关于C代码,搜索功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275541/

相关文章:

c - 评估多项式函数

c - Memcpy:字节数错误

c - 结构体数组错误

javascript - 将 JavaScript 源文件的全部内容包装在函数 block 中的意义和原因是什么?

python - 在 Python find() 调用中使两个字符相等

python - O(log n) 在排序的 python 字典中搜索

linux - Perl 搜索和替换

c - 双向链表不起作用

c - 通过函数传递结构时收到警告

javascript - 尝试将输入变量值返回到其初始全局变量时的基本问题