Ir ao conteúdo

Posts recomendados

Postado

Estou tentando mostras as posições de uma palavra encontrada em uma frase digitada. Exemplo:

 

Entrada:

Frase: O rato roel a roupa

palavra: ro

 

Saída:

A palavra foi encontra.

 

Posição: 8, 15.

O programa deve buscar essa palavra na frase e mostra se ela tem, se tiver deve mostrar a posição dela.

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


bool existe(char termo[], char frase[]){
    int teste[ strlen(termo) ];
    int aux;
    bool ok;

    //se o termo for maior que a frase
    if( strlen(termo) > strlen(frase) ){
        return false;
    }
    //se o termo for do tamanho da frase
    if( strcmp(termo, frase) == 0){
        return true;
    }
    //se o termo for menor que a frase
    for(int i=0; i<= strlen(frase) - strlen(termo); ++i){
        if(frase[i] == termo[0]){

                for(int k=0; k < strlen(termo); ++k)
                    teste[k]=0;

                aux=i;
                for(int j=0; j < strlen(termo);++j){
                    if(termo[j] == frase[aux]){
                        teste[j]=1;
                        aux++;

                    }
                }
        ok=true;
        for(int m=0; m< strlen(termo); ++m){
            if(teste[m] == 0){
                ok=false;
            }
        }
        if( ok ){
            return true;
        }
    }
}
    return false;

}

int main() {

char frase[100];
char termo[10];
gets(termo);
gets(frase);

    if(existe(termo, frase)){
        printf("\n A palavra foi encontrada \n");
    }else{
        printf("\n A palavra nao foi encontrada \n");
    }

return 0;
}

 

  • Obrigado 1
Postado
1 hora atrás, Emerson2156547384729849 disse:

Entrada:

Frase: O rato roel a roupa

palavra: ro

 

Saída:

A palavra foi encontra.

 

Posição: 8, 15.

 

Seu programa parece muito complicado. 

 

NUNCA use gets(). Isso não existe mais há décadas. E é mais complicado.

 

Sua função está errada. Não basta dizer se tem ou não tem: precisa das posições.

 

#include <stdbool.h>
bool existe(char termo[], char frase[]){
  // ...

 

O mundo C sem setbool seria igualzinho. Não acrescenta nada. Só diminui. Zero é falso, o resto é verdadeiro. E ainda pode usar todos os outros valores além de 0 e 1.

 

Não precisa de strlen() nesse tipo de problema. Não faz diferença o tamanho das strings.

 

O caminho mais simples para esse tipo de problema e para milhões de problemas semelhantes é usar uma máquina de estados --- FSA ou automato.

 

Considere que

  • vai ler a frase até encontrar um zero
  • lendo a frase
    • quando encontrar a primeira letra da palavra que esta procurando vai passar a procurar as próximas letras até achar um zero na palavra.
    • E se encontrar achou uma ocorrência da palavra na frase, e volta a procurar a primeira letra

E é só isso.

 

Então pode usar isso e criar estados indicados por um número por exemplo. E ir passando as letras da frase para um loop que testa o estado e age de acordo.

 

Talvez sua função possa ir mostrando as respostas apenas. O enunciado é bem liberal. Uma outra opção, mais fashion,  seria a função retornar uma string com a resposta.

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!