|
![]() |
||
Linguagem C - procurar string
|
||
. Nós temos 754.116 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) |
|
Membro Senior
Registrado em: Mar 2003
Mensagens: 157
Reputação: 19
![]() |
Pessoal, eu estou com o seguinte probleminha. Eu tenho uma variável.
x = 'textooooooooooooooooooooooooooooooooooooooooooooo o' então eu tenho uma variavel: buscar = 'qualquer' eu preciso procurar dentro desta minha variável x a quantidade de vezes que apareceu a palavra "qualquer" que está na variável buscar. Alguém saberia me dizer como eu posso fazer isto? Desde já agradeço. Wilton
__________________
Wilton - Newbie |
|
|
|
|
|
#2 (permalink) |
|
Super Participante
Registrado em: Dec 2001
Mensagens: 937
Reputação: 22
![]() |
Vc pode usar a strpbrk() da string.h
Mais ela só procura uma vez, vc vai precisar fazer um loop para percorrer toda a string.
__________________
Linux User:#326216 Intel I7 - 920 - 6G DDR3 Tripple Channel @1600 - Geforce 285 1G. Programador ADVPL(Fazer o que é o que ta pagando as contas no momento...) |
|
|
|
|
|
#3 (permalink) |
|
Tô em todas
Registrado em: Apr 2002
Localização: Paulista/PE
Mensagens: 1.600
Reputação: 76
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Presupondo que suas variáveis estão declaradas corretamente como vetores de caracteres, vou dar uma sugestão ai vc pensa um pouco e tenta implementar.
Você concorda que se uma palavra existir dentro do seu "texto" a primeira letra tem de existir?? então cria uma rotina "procura" que verifica a primeira letra, dentro dessa rotina você coloca uma variavel status (que vai indicar se você está dentro da palavra procurada), logo se primeira letra é encontrada e status igual a "fora" compare a segunda letra, se a segunda letra coincidir com a da palavra procurada, continue verificando caso contrário, status igual a fora e procure a primeira letra. Isso até o fim do vetor, lógico que você tera de implementar uma rotina que informa se foi encontrada a palavra inteira e que armazena um contador para informar a quantidade encontrada no final do programa. Veja que esta resposta não é a mais eficiente, o tempo de execução vai ser uma desvantagem (ele tem de verificar todo o vetor, ai, se for grande ja viu né?) Lembre que os caracteres em C são diferenciados no que diz respeito a maiúscula e minúscula, logo recomendo que você implemente na procura uma conversão ou converte o caracter analisado para minúsculo ou para maiúsculo e só depois compara. Existem alguns ajustes que você pode fazer no algorítimo para melhorar um pouco o desempenho, crie o código que depois debatemos. t+ |
|
|
|
|
|
#4 (permalink) |
|
Zumbi
|
Tem a função strtotok(), mas acho que é do C++, ela transforma strings em tokens, ou seja, separa por palavras. Fazendo isso dá pra passar pra um vetor, e aí é só percorrer.
__________________
Por favor evitem fazer perguntas técnicas por MP, o fórum existe para isso. EeePC 4G 701 + Windows Vista Ultimate |
|
|
|
|
|
#5 (permalink) |
|
Veterano
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 16
![]() |
[quote="Wormer"]Tem a função strtotok(), mas acho que é do C++, ela transforma strings em tokens, ou seja, separa por palavras.
Nope. Não existe strtotok() em nenhuma biblioteca padrão C/C++. O que existe é a função strtok(char *str, const char *delimitadores), a qual, em chamadas sucessivas, retorna os tokens contidos na string str. Os tokens são delimitados pelos caracteres contidos em delimitadores. Ou seja, strtok() não serve para resolver o problema do Wilton. Mas, se vale utilizar funções de biblioteca, talvez strstr() possa ajudar: http://www.cplusplus.com/ref/cstring/strstr.html A questão é: pode haver sobreposição da string procurada? Por exemplo: Quantas vezes a palavra "careca" ocorre em abccarecarecarecaxyz :?:
__________________
Jeferson Charles Mayer "Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?" |
|
|
|
|
|
#6 (permalink) | |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Citação:
por exemplo em Perl (que suporta RegEx) eu faço assim: Código:
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
|
|
#7 (permalink) | |
|
Tô em todas
Registrado em: Apr 2002
Localização: Paulista/PE
Mensagens: 1.600
Reputação: 76
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Citação:
Se ele simplesmente implementar a rotina sem levar em consideração testes para verificar a entrada e saida de palavras, ai vale a sobreposição. Pode-se considerar como palavra um conjunto de caracteres delimitados por caracteres "em branco" (tabulações, espaços, nova linha) isso resolveria o problema de sobreposição. Outra alternativa seria basear o inicio da palavra na primeira localização do primeiro caracter da palavra, evitando buscas repetidas no primeiro caracter, foi o que tentei explicar no primeiro post. Essa alternativa elimina a necessidade de verificar o limite das palavras (espaços em branco). O problema seria pesquisar o vetor inteiro, dependendo do tamanho do texto isso ia demoooraaarrrrr ...zzzz. |
|
|
|
|
|
|
#8 (permalink) | |
|
Veterano
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 16
![]() |
Citação:
__________________
Jeferson Charles Mayer "Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?" |
|
|
|
|
|
|
#9 (permalink) |
|
Tô em todas
Registrado em: Apr 2002
Localização: Paulista/PE
Mensagens: 1.600
Reputação: 76
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
a primeira, pergunta: Para resolver o problema vale usar a biblioteca padrão? ou é algum exercício de curso ou faculdade? não gosto de postar código fonte porque as pessoas vem aqui para que os outros façam os trabalhos, é por isso que só dou as idéias para resolução.
a segunda: A função strstr() retorna um apontador, o rapaz que fez a pergunta sabe usar apontadores? a terceira pergunta: o grep usa strstr()? Uma possível solução, mais tem que ser modificada pois, retorna um inteiro com o índice onde foi localizada a string, se não for encontrada retorna -1, assim, se for exercício eu não respondi tua pergunta, pensa e reponde sozinho, o código: Código:
:? t+ |
|
|
|
![]() |
| Opções do Tópico | |
|
|