Jump to content

Pesquisa por partes do nome


alligator
 Share

Recommended Posts

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 ?

Link to comment
Share on other sites

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 ? 

Link to comment
Share on other sites

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 () {

}

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

@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

Link to comment
Share on other sites

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
*/
Link to comment
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
 Share

×
×
  • 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.