C代码,搜索功能
目前我正在努力修改一个基本的搜索功能 好吧,我让它工作了,搜索列表中包含的任何东西的名称,但是如果我只想搜索它名称的一部分,例如,如果名称是Bana,我输入Bana,它会给我Banana 搜索功能:C代码,搜索功能,c,function,search,struct,C,Function,Search,Struct,目前我正在努力修改一个基本的搜索功能 好吧,我让它工作了,搜索列表中包含的任何东西的名称,但是如果我只想搜索它名称的一部分,例如,如果名称是Bana,我输入Bana,它会给我Banana 搜索功能: void * PesquisaProdutos(PLISTA v1, int(*compara)(), void* valor) { int i; for (i = 0; i < v1->posicao;i++) if ((*compara)(v1->cab
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
。它允许您指定要检查的最大字符数
因此:
那是真的
或者您可以使用strstr
在另一个字符串中的某处查找字符串:
ststsr ("banana", "an")
将返回一个指针,指向字符串banana
(本例中的第二个字符)中第一次出现的an
,如果不在其中,则返回NULL
因此,您的比较函数将类似(仅对您感兴趣的函数取消注释):
在您的环境中,您还可以使用其他字符串比较函数,例如不区分大小写的函数,但它们在技术上不是ISO C标准的一部分。如果您只想检查字符串的前几个字符,可以使用
strncmp
。它允许您指定要检查的最大字符数
因此:
那是真的
或者您可以使用strstr
在另一个字符串中的某处查找字符串:
ststsr ("banana", "an")
将返回一个指针,指向字符串banana
(本例中的第二个字符)中第一次出现的an
,如果不在其中,则返回NULL
因此,您的比较函数将类似(仅对您感兴趣的函数取消注释):
在您的环境中,您还可以使用其他字符串比较函数,例如不区分大小写的函数,但它们在技术上不是ISO C标准的一部分。如果您只想检查字符串的前几个字符,可以使用
strncmp
。它允许您指定要检查的最大字符数
因此:
那是真的
或者您可以使用strstr
在另一个字符串中的某处查找字符串:
ststsr ("banana", "an")
将返回一个指针,指向字符串banana
(本例中的第二个字符)中第一次出现的an
,如果不在其中,则返回NULL
因此,您的比较函数将类似(仅对您感兴趣的函数取消注释):
在您的环境中,您还可以使用其他字符串比较函数,例如不区分大小写的函数,但它们在技术上不是ISO C标准的一部分。如果您只想检查字符串的前几个字符,可以使用
strncmp
。它允许您指定要检查的最大字符数
因此:
那是真的
或者您可以使用strstr
在另一个字符串中的某处查找字符串:
ststsr ("banana", "an")
将返回一个指针,指向字符串banana
(本例中的第二个字符)中第一次出现的an
,如果不在其中,则返回NULL
因此,您的比较函数将类似(仅对您感兴趣的函数取消注释):
在您的环境中可能还有其他字符串比较功能,例如不区分大小写的功能,但它们在技术上不是ISO C标准的一部分。用strstr替换strcmp?用strstr替换strcmp?用strstrstr替换strcmp?用strstrstr替换strcmp?I understond,但假设我有一个名为、年龄等的结构,我要求用户添加名称,然后将其发送到列表并存储。稍后,如果我想搜索该名称,我是否可以使用STSR进行搜索?用户输入名称ange,搜索函数将获得名称Angelina,这是用户想要搜索的名称。@Diogo,是的,您只需要提供一个合适的比较函数。你手上的那个是完全匹配的。使用带有
strstrstr
(我已将代码添加到我的答案中,请参见第三个选项)的一个将在descriptionço
中的任意位置找到带有nome
字符串的一个。我理解了它,但假设我有一个带有名称、年龄等的结构。我要求用户添加名称,然后将其发送到列表并存储。稍后,如果我想搜索该名称,我是否可以使用STSR进行搜索?用户输入名称ange,搜索函数将获得名称Angelina,这是用户想要搜索的名称。@Diogo,是的,您只需要提供一个合适的比较函数。你手上的那个是完全匹配的。使用带有strstrstr
(我已将代码添加到我的答案中,请参见第三个选项)的一个将在descriptionço
中的任意位置找到带有nome
字符串的一个。我理解了它,但假设我有一个带有名称、年龄等的结构。我要求用户添加名称,然后将其发送到列表并存储。稍后,如果我想搜索该名称,我是否可以使用STSR进行搜索?用户输入名称ange,搜索函数将获得名称Angelina,这是用户想要搜索的名称。@Diogo,是的,您只需要提供一个合适的比较函数。你手上的那个是完全匹配的。使用带有strstrstr
(我已将代码添加到我的答案中,请参见第三个选项)的一个将在descriptionço
中的任意位置找到带有nome
字符串的一个。我理解了它,但假设我有一个带有名称、年龄等的结构。我要求用户添加名称,然后将其发送到列表并存储。稍后,如果我想搜索该名称,我是否可以使用STSR进行搜索?用户输入名称ange,搜索函数将获得名称Angelina,这是用户想要搜索的名称。@Diogo,是的,您只需要提供一个合适的比较函数。你有一个