首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C代码,搜索功能

问C代码,搜索功能
EN

Stack Overflow用户
提问于 2014-06-18 00:59:02
回答 1查看 80关注 0票数 0

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

嗯,我让它起作用了,并且搜索列表中包含的任何东西的名称,但是如果我只想用名字的一部分来搜索某个东西,例如,如果名称是Banana,然后输入Bana,它就会给我香蕉。

搜索功能:

代码语言:javascript
复制
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;
}

比较功能:

代码语言:javascript
复制
int cmpDescricaoProduto(PLISTAPRODUTOS p, char* nome) {
    return strcmp(p->Descricao, nome) == 0;
}

主要部分:

代码语言:javascript
复制
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;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-18 01:04:10

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

所以:

代码语言:javascript
复制
strncmp ("banana", "ban", 3)

都是真的。

或者可以使用strstr在另一个字符串中的某个位置找到一个字符串:

代码语言:javascript
复制
ststsr ("banana", "an")

将返回指向字符串an (本例中的第二个字符)中第一次出现的banana的指针,或者如果它不在那里,则返回NULL。

因此,您的比较函数将类似于(只对您感兴趣的一个进行注释):

代码语言:javascript
复制
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标准的一部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24275541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档