Jump to content
alligator

Pesquisa por partes do nome

Recommended Posts

alligator

Boas

Tenho uma string com varias posições , onde contem cerca de 50 designações de produtos ! Pretendo implementar uma pesquisa por partes do nome .  Por exemplo suponho que tenho os produtos "  cereais chocolate , cereais de mel  e barras cereais " . O que pretendo é que quando escrever cereais , me apareçam os 3 produtos. 

Que função me pode resolver isto ?

Share this post


Link to post
Share on other sites
bubulindo

Que função me pode resolver isto ?

A que tu construires para resolver este problema.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
alligator

Sim essa parte eu já sei !  Assim como sei o que fazer para ele percorrer as posições  do array . A minha pergunta é se há alguma função da biblioteca do C que me possa ajudar. Sei que o Strncmp funciona , mas pelo que testei so pesquisa ate ao primeiro nome,logo no caso barra cereais nao vai funcionar ! 

Alguém tem alguma sugestão ? 

Share this post


Link to post
Share on other sites
bubulindo

Sim...

Depois de encontrares o primeiro nome, podes copiar a restante string para uma nova string e testar ali.

Podes também indicar no strcmp o início da string que pretendes testar como sendo o primeiro caracter após teres encontrado a palavra que procuras. Tás a ver a ideia?

Inicialmente procuras com vector [0], mas após teres encontrado a palavra usas vector[fim da palavra cereais +1].

Tás a ver a ideia?


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
alligator

Acho que estou a ver mais ou menos a ideia , mas não entedi tudo !

Seria possível postares um exemplo pratico do que explicaste e a implementação do codigo ?

Para facilitar inidico que tenho o programa da seguinte forma:

#define N 50

struct Produtos{

char nome[40]

int total 

...

}

struct Produtos Produtos[N]  ---> declaração do array

Será algo do tipo

for(i=0;i<N;i++){

if( XXXXXXXXXXXX )          Sera neste if que levara as condiçoes que explicaste ?  Como faço ?

Share this post


Link to post
Share on other sites
alligator

Boas

Tambem ja tentei com essa funçao , mas nao entendo bem a sua sintexe , com a estrutura que dei no post , podias me dar um exemplo do seu funcionamento ?

Share this post


Link to post
Share on other sites
Localhost

A complexidade do problema parece-me requerer soluções mais elaboradas do que aquelas que indicaram aqui se a string estiver naquela forma que o criador do tópico apresentou.


here since 2009

Share this post


Link to post
Share on other sites
kurayama

Olha que não, basta ele usar o strtok para dividir a string por virgulas, ver se o token é corresponde ao que quer (usando a strstr, e ver se dá diferente de NULL) e depois meter num array ou lista ligada as palavras.

Share this post


Link to post
Share on other sites
alligator

Como funciona exactamente essa função  ? Ela divide o nome em varias palavras certo ? Como depois tenho acesso a essas palavras isoladas para fazer a comparaçao ?

Precisava mesmo de uma soluçao para este problema .

Obrigado

Share this post


Link to post
Share on other sites
alligator

Obrigado ! Vou usar o google ( outra vez )  e continuar sem preceber como tenho acesso aos "token" para posteriormente comparar .

Acredita que so posto aqui , aquilo que realmente não sei fazer e que não encontro explicação de como fazer .

Bem haja a todos os que ja ajudaram neste post e em geral a toda a comunidade do fórum. 

Share this post


Link to post
Share on other sites
Xpirito

Faz assim:

1-> percorres o array até encontrar a palavra "cereais"

2-> guarda a posição da ultima letra da palavra "cereais"

3-> Percorres o resto do array à procura da palavra "cereais", mas desta vez começas a pesquisa na posição que guardaste no ponto 2.

A função strcmp da bilioteca string.h Funciona comparando 2 strings (ou conjuntos ordenados de vectores em C)

   

(strcmp (variável1,variável2)

compara a variável1 com a variável2


Para perguntas idiotas, respostas estúpidas!

Share this post


Link to post
Share on other sites
Localhost

@Xpirito, essa é a ideia base que eu também pensei. O problema é que se a string contiver pontos de interrogação, vírgulas, etc. isso não vai funcionar.

Existe ainda o problema de a string for parecida com a fornecida pelo criador do tópico: "cereais de chocolate, cereais de mel e barras de cereais".

Segundo o teu método o resultado seria:

* " de chocolate, "

* "cereais de mel e barras de "

* "cereais"

Achas que isto está correcto...?


here since 2009

Share this post


Link to post
Share on other sites
kurayama

Vê lá se este exemplo te ajuda..

Não te esqueças que estes tokens desaparecem depois, se queres guardar tens de copiar para outro lado (usando p.ex strcpy).

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char const *argv[])
{
  // strtok modifica o input, convem copiar para um buffer e usar esse.
  char *data = "cereais chocolate,chocapic,cereais de mel,kellogs,barras cereais,crunch";
  char *buf = (char*)malloc(strlen(data));
  strcpy(buf, data);
  char *tok;
  
  for(tok = strtok(buf, ","); tok!=NULL; tok = strtok(NULL, ","))
    if(strstr(tok, "cereais")!=NULL)
      printf("%s\n", tok);
  
  free(buf);
  
  return 0;
}

/* 
Output:
cereais chocolate
cereais de mel
barras cereais
*/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.