目前我正在努力尝试修改一个基本的搜索功能。
好吧,我让它工作了,并搜索列表中包含的任何内容的名称,但是如果我只想通过其名称的一部分来搜索某些内容,例如,如果名称是 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/