目前,我正在努力修改一个基本的搜索功能。
嗯,我让它起作用了,并且搜索列表中包含的任何东西的名称,但是如果我只想用名字的一部分来搜索某个东西,例如,如果名称是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;如果可能的话,我想听听一些想法,谢谢。
发布于 2014-06-18 01:04:10
如果只想检查字符串的前几个字符,可以使用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标准的一部分。
https://stackoverflow.com/questions/24275541
复制相似问题