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:
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 :(
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
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.
podes tentar ver aqui: http://en.wikipedia.org/wiki/String_searching_algorithm
ASA power :D
fazes include do string.h e usas o strcmp ou o strstr
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?
$ man strstr
NAME
strstr - locate a substring
SYNOPSIS
#include <string.h>
char *strstr(const char *haystack, const char *needle);
.
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.
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:
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();
|
|