View Full Version : algoritmos de procura- alguem sabe? -> RESOLVIDO


sdvferreira
05-06-2007, 18:59
viva, procuro um algoritmo em C que procure numa string [][] uma palavrado tipo: palavra "ana" numa string "a minha mana . pranana"

inventando um cadito :002: temos a palavra ana 3 vezes

:zzz:alguma ideia? :zzz:

não faço a mínima... :wow:

sLiNk
05-06-2007, 19:13
Explica melhor.

Pelo que vejo aí ( String[][] ), isso é uma matriz de strings.

sdvferreira
05-06-2007, 19:28
visto de outra maneira.. quando fiz a pergunta fiz de acordo com o meu problema..

tenho uma string str[20]= "ola mana pranana"

e quero encontrar uma palavra "ana"

em ola = 0 vezes
em mana = 1 vez
em pranana = 2 vezes

ora não sei como fazer isso :(

hYpe
05-06-2007, 19:45
Acho q o melhor que tens a fazer e' percorrer a string caracter a caracter..
E quando encontras um 'a' (no exemplo do 'ana') vais verificar o caracter q esta a seguir (i+1) e o q esta depois (i+2).

Se o (i+1) for um n e o (i+2) for um a entao i=i+2 para continuares a pesquisa mais ah frente.
E dizes que encontrou, claro, ou gravas para ficheiro ou o q quer q seja q queres fazer.

Cumps

sdvferreira
05-06-2007, 19:51
pois eu tenho essa ideia.. mas na pratica ... como funciona para palavras grandes..

estou a tentar fazer o algoritmo... já coloco aqui.. se tiveres algum deixa ;)

thanks

sLiNk
05-06-2007, 20:01
Pedes ao utilizador a frase e guardas numa string. Pedes a palavra a procurar e guardas noutra.

Fazes split á string que contem a frase, e guardas cada uma das palavras num vector de strings.

Depois percorres o vector. Se o comprimento da palavra na posição actual do vector for menor que o comprimento da palavra a pesquisar, passas á próxima posição do vector.

Senão, comparas o primeiro caracter da palavra dessa posição do vector, com o primeiro caracter da palavra a pesquisar. Se forem iguais, passas ao caracter seguinte de cada uma das palavras e comparas. Se forem iguais outra vez, passas ao seguinte. E isto até ao fim dos caracteres da palavra a pesquisar. Se for tudo igual, é só incrementar um contador.

Senão, quando um caracter não for igual, passas ao segundo caracter da palavra do vector, e começas a comparar de novo com os caracteres da palavra a pesquisar.

Penso que sej mais ou menos isto. Se fosse em Java, punha aqui o código, mas em C, não sei quais são as funções equivalentes.

EDIT: Vou fazer em Java, e depois tentar passar para algoritmo, e coloco-o aqui.

Apophis
05-06-2007, 20:02
podes tentar ver aqui: http://en.wikipedia.org/wiki/String_searching_algorithm

ASA power :D

Datwo
05-06-2007, 20:28
fazes include do string.h e usas o strcmp ou o strstr

Jeust
05-06-2007, 20:59
yahhhh... usa o strcmp da biblioteca string.h

facilita-te o trabalho.

mas como é k keres o output? mete ai um exemplo... keres k detecte a primeira ocorrência da palavra ana e a escreva no ecran, ou a localização dela, ou isto aplicado a todas as ocorrencias? Ou keres k o output te diga o número de ocorrencias em cada palavra da matriz?

PrOdG
05-06-2007, 22:12
$ man strstr

NAME
strstr - locate a substring

SYNOPSIS
#include <string.h>
char *strstr(const char *haystack, const char *needle);

.

sLiNk
05-06-2007, 22:44
Já pensaram que o objectivo seja mesmo ele fazer um algoritmo que faça o que ele pede, em vez de usar métodos do próprio C?

Também tive que fazer um exercicio em Java que dada uma data inicial e uma final, tendo em conta que o primeiro dia do primeiro mês do primeiro ano foi num Domingo, calculasse todas a sextas-feiras 13 do intervalo. Até seria relativamente fácil se fosse usado um método de Java que dada uma data, devolve o dia da semana correspondente. Mas não era essa a intenção do exercicio.

Datwo
05-06-2007, 22:55
Já pensaram que o objectivo seja mesmo ele fazer um algoritmo que faça o que ele pede, em vez de usar métodos do próprio C?

Também tive que fazer um exercicio em Java que dada uma data inicial e uma final, tendo em conta que o primeiro dia do primeiro mês do primeiro ano foi num Domingo, calculasse todas a sextas-feiras 13 do intervalo. Até seria relativamente fácil se fosse usado um método de Java que dada uma data, devolve o dia da semana correspondente. Mas não era essa a intenção do exercicio.

nesse caso pediam-lhe isso mesmo, mas como ele não falou em objecções...

legerdemain
06-06-2007, 00:36
visto de outra maneira.. quando fiz a pergunta fiz de acordo com o meu problema..

tenho uma string str[20]= "ola mana pranana"

e quero encontrar uma palavra "ana"

em ola = 0 vezes
em mana = 1 vez
em pranana = 2 vezes

ora não sei como fazer isso :(

str[20] é a posição 20 do array str do tipo string...
parece-me mais que tu queres char[] (ou seja, uma string)

se queres mesmo fazer o algoritmo, é iterares pelo char[] e comparares.. :zzz:

souto
06-06-2007, 00:41
A solução com um método recursivo é de todas a mais elegante.

Cumprimentos.

sdvferreira
06-06-2007, 19:19
Obrigado a todos ;)

já está resolvido com o STRSTR();