C代码,搜索功能

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

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

好吧,我让它工作了,搜索列表中包含的任何东西的名称,但是如果我只想搜索它名称的一部分,例如,如果名称是Bana,我输入Bana,它会给我Banana

搜索功能:

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,是的,您只需要提供一个合适的比较函数。你有一个