Ir ao conteúdo

Posts recomendados

Postado

( to com um problema nessa questão, no codigo eu digito a frase e a palavra que eu quero saber quantas tem na frase, só que a questão pedi que o usuário digite a frase no prompt de comando e o algoritmo por se só identifique as palavras iguais e me diga qual foi elas e quantas são, tem como me ajudar por favor )

 

O QUE A QUESTÂO PEDE:

Implemente um programa no qual o usuario informa, através da linha de comando, uma frase e o programa busca todas repetições da mesma palavra. Ao final, o programa imprime o numero de vezes que cada palavra aparece no frase. Para isso, só será permitido utilizar as funções strcpy(), strlen(), e fgets() de String.h. Realize a implementação própria de todas outras funções que precisar para resolver o problema.

#include <stdio.h>
#include <stdlib.h>

int main(void){
    
    char text[80];
    char p[80];
    printf("Digite a frase: \n");
    fgets(p, 80, stdin);
    
    int i  = 0; //! Variável inteira Índice do texto.
     int j  = 0; //! Variável inteira Índice da palavra.
      int t  = 0; //! Variável inteira quantidade de ocorrências de p em text.
          while( text[i] != '\0' ){ //! Laço continuar até que o texto chegue ao fim.
    if( text[i++] == p[j] || (j = 0) )j++;//! Se os caracteres coincidem incrementa.
    //! Se não reinicia se o índice da palavra com j <- 0 dentro operador OU.
    if( p[j] == '\0' )printf( "%d-%s\n", 1+t, p ), j = 0, t++;//! j atingiu o max
    //!de incremento, por tanto, palavra encontrada então imprimi, incrementa o contador e
    //!reinicia o índice da palavra j <- 0.
  }
  printf( "%s%s%s%d%s",//!Imprime o resultado.
         "A palavra /",p,"/ repetiu ", t, " vezes.\n" );
  return 0;    
}

 

  • Amei 1
Postado

@Wesley Araujo Fernandes @Wesley Araujo Fernandes    esse enunciado não esta completo ,   pois precisa de uma frase e uma palavra  ,  e depois  procurar  tal palavra dentro dessa frase  ,   e no seu codigo , voce esta comparando a string '"text"  ,  mas ela não foi preenchida e nem inicializada ,  assim o conteudo dela  eh desconhecido ,   e com certeza o resultado estarah errado  .

 

#include <stdio.h> #include <stdlib.h> int main(void){          char text[80]={"qualquer coisa e mais alguma coisa"};    char p[80]={"coisa"};     printf("Digite a frase: \n");     //fgets(p, 80, stdin);          int i  = 0; //! Variável inteira Índice do texto.      int j  = 0; //! Variável inteira Índice da palavra.       int t  = 0; //! Variável inteira quantidade de ocorrências de p em text.           while( text[i] != '\0' ){ //! Laço continuar até que o texto chegue ao fim.     if( text[i++] == p[j] || (j = 0) )j++;//! Se os caracteres coincidem incrementa.     //! Se não reinicia se o índice da palavra com j <- 0 dentro operador OU.     if( p[j] == '\0' )printf( "%d-%s\n", 1+t, p ), j = 0, t++;//! j atingiu o max     //!de incremento, por tanto, palavra encontrada então imprimi, incrementa o contador e     //!reinicia o índice da palavra j <- 0.   }   printf( "%s%s%s%d%s",//!Imprime o resultado.          "A palavra /",p,"/ repetiu ", t, " vezes.\n" );   return 0;     }

 

Postado

Opa, acho que você não entender, digitar assim no código a frase e a palavra a ser procurada eu tô conseguindo fazer, mais o que a questão pede é pra o usuário digitar a frase desejada no prompt de comando, e a partir disso o algoritmo procurar as palavras iguais, essa tá sendo minha dificuldade, deu pra entender melhor?

Nesse caso do seu código, você já digitou a frase nele, e logo após executar, ele vai mostrar o resultado, mais eu preciso digitar a frase dps fora do algoritmo, espero que tenha entendido kk

  • Amei 1
Postado

@Wesley Araujo Fernandes     sim , agora entendi melhor , mas veja que no seu código a frase não foi digitada pelo usuário , e mesmo assim você está comparando as letras dessa frase desconhecida , e é Lógico que haverá caracteres nela , mas com certeza serão caracteres aleatórios , tipo assim  :

frase ->  "*/kjnhgf54/{p+-)...|"agh . . . !";

pois você apenas criou uma variável do tipo string ,  e o compilador reservou um espaço na memória para essa string , e nesse espaço já existe alguma coisa armazenada , e então o que você precisa é pegar o que o usuário digitou e colocar nessa variáveL "frase"  ,  e isso pode ser feito de várias maneiras ,  ex;: com , scanf(); , fgets();  ,  getchar(). getch(); outra função que você mesmo pode criar  .

fgets( frase , sizeof(frase) , stdin);  /// trê barras ,  pois no codeblocks o comentário fica mais visiveL
                                        /// sizeof(); , pega o tamanho da string digitada ou outra 
                                        /// qq que esteja ente os parenteses

 

Postado

https://www.clubedohardware.com.br/forums/topic/1184472-achar-palavra-em-uma-frasebusca-de-string-em-string/#comment-6515505

 

Não tenho nada contra o fato de você ter copiado o código do tópico acima, mas assim você nunca vai conseguir programar sozinho, prova disso é que você não está conseguido nem alterar esse código.

 

Minha sugestão é começar novamente a partir do velho "Hello World!", sem pular etapas.

  • Obrigado 1
Postado

Como a quantidade de palavras e o tamanho de cada é desconhecido, entendo que deve ser permitido alocação dinânica. Mas sem isso você pode definir o limite de palavras e o tamanho de cada uma, p.ex,

 

char palavras[100][50];
int conta[100];

 

O arranjo das palavras vai armazenar cada palavra da frase, sem repetição, e a quantidade máxima é 100 com o limite de 50 letras cada. O vetor conta vai guardar a quantidade de vezes que cada palavra se repete.

 

Para auxiliar na contagem poderia usar uma função, p.ex,

int repete(char palavras[100][50], char palavra[50], int n) {
    for (int i = 0; i < n; i += 1) {
        if (strcmp(palavras[i], palavra) == 0) {
            return i;
        }
    }
    return -1;
}

 

Aí retorna -1 se no vetor não tem a palavra ainda e caso tenha vai retornar a posição para incrementar a quantidade no vetor conta. E a contagem fica assim no loop das letras da frase,

int n = repete(palavras, palavra, indice);

if (n == -1) {
    strcpy(palavras[indice], palavra);
    indice += 1;
} else {
    conta[n] += 1;
}

 

A string palavra recebe cada palavra da frase.

  • Obrigado 1
Postado

@devair1010 Acabei usando strcmp. Sem essa pode ser criada outra função semelhante para usar no lugar, p.ex:

if(iguais(palavras[i], palavra)){
...

 

A função iguais pode retornar 0 se forem diferentes, caso contrário retorna 1.

  • Obrigado 1
Postado

@Midori tentei construir os exemplos que você me passou mais ainda não cheguei na execução final da questão , o que eu poderia fazer?

 

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

int main(){
    
    char palavras[100][50];
    char conta[100];
    
    printf("Introduza a frase\n");
    fgets(palavras,50,stdin);
    
    int repete(char *palavras[100][50], char *palavra[50], int n){
        for (int i=0; i<n; i+=1)
    {
        if (iguais(palavras[i], palavra)){
            return i;
        }
    }
    return -1;
    }
    
    int n = repete(palavras, palavra, indice);
        if (n == -1){
            strcpy(palavras[indice], palavra);
            indice += 1;
        }else{
            conta[n] += 1;
        }
}
 

tem umas coisas erradas, como a declaração de ponteiros, porque eu estava testando e esqueci de tirar, então ignore kk

  • Amei 1
Postado
40 minutos atrás, Wesley Araujo Fernandes disse:

fgets(palavras,50,stdin);

palavras não é para armazenar a frase, é para guardar cada palavra da frase.

 

A entrada do usuário será uma frase, então terá que fazer outra declaração para ela. E como ainda está em fase de implementação, não use fgets, apenas inicie a string com qualquer frase para não ter que ficar digitando toda vez que testar o seu código, p.ex,

char frase[1000] = "Uma frase qualquer";

 

E o seu código ainda tem que identificar as palavras no texto já que esta linha vai copiar ela para a matriz,

strcpy(palavras[indice], palavra);

 

Para isso você pode fazer uma condicional que verifique onde tem espaço na frase para delimitar a palavra que será copiada.

  • Obrigado 1
Postado

Mais a questão esta pedindo para o usuário digitara frase que deseja , não é pra colocar a frase no algoritmo, porque se eu colocar char  frase [1000] = “frase qualquer” assim quando eu executar já vai mostrar o resultado, não vai pedir pra digitar a frase

 

espero que tenha entendido , porque é exatamente assim que a questão pedi, e não tô conseguindo formar uma string que ache essa palavras iguais

  • Obrigado 1
Postado

@Wesley Araujo Fernandes Sim o usuário deve digitar a frase, isso está claro... O ponto é que você ainda está desenvolvendo e vai rodar código algumas vezes antes de chegar no resultado esperado. Então para não ter que ficar digitando a frase toda vez que testar, inicie com um texto qualquer. Só depois que mostar tudo certo coloque o fgets.

  • Curtir 1
Postado

Ah tudo bem mano, desculpe não tinha entendido.

mais uma coisa, eu retiro o fgets e coloco o char frase[100] = “ banana é verde” pra verificar antes, e coloco também char palavra[] = “na” pra verificar se acha a palavra que eu procuro né isso, porque se tiver só a frase não vai rodar né isso?

  • Curtir 1
Postado

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

int existe(char *str1, char *str2, int id){
    
    int i, j = 0;
    
    for (i = id; i < strlen(str1); i++){
        if (str1[i] == str2[j])
            j++;
        else
            j = 0;
        if (j == strlen(str2))
            return i;
    }
    return -1;
}
    int main(){
        char str1[50] = "ama quem ama ama muito";
        char str2[] = "ama";
        int indice = 0, quantidade = 0;
        
        do{
            indice = existe (str1, str2, indice);
            printf("Retorno: %d\n", indice);
            if(indice != -1)
                quantidade++;
            
        }while(indice != -1);
        
        
        printf ("\nQuantidade: %d\n", quantidade);
        
        return 0;
    }

 

como faço pra enclementar a função fgets para que o usuario digite a frase desejada e o algoritmo identifique as palavras iguais e me mostre a quantidade, fiz esse exemplo, mais não consigo colocar a função que ler as palavras na frase

coloquei assim fgets (str2, 50, stdin); ta pedindo a frase, mais não mostra as palavras iguais, o que to fazendo de errado ??

  • Curtir 1
Postado

@Wesley Araujo Fernandes O contador da sua função existe começa do valor passado como argumento em id. Assim ele só vai pegar as letras da string a partir desse valor, então se a palavra que quer procurar começa antes disso ela não será considerada.De qualquer forma essa forma de identificar a palavra é diferente do que sugeri, veja que listo um arranjo de palavras e não apenas uma palavra ou a frase completa, por isso retorno um valor para ser usado como índice.

  • Curtir 1
  • Obrigado 1
Postado

@Wesley Araujo Fernandes      para pegar cada palavra use um loop e seu código ficaria assim :

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

int existe(char *str1, char *str2, int id){
  int i, j = 0;
  for(i = id; i < strlen(str1); i++)
  {
    if (str1[i] == str2[j])
      j++;
    else
      j = 0;
    if (j == strlen(str2))
      return i;
  }
  return -1;
}
int main()
{
  char str1[50] = "ama quem ama ama muito ama";
  char str2[] = "ama";
  /// fgets(str1,80,stdin); testar esse depois
  int indice = 0, quantidade = 0;
  int tam = strlen(str1);
  /// str1[tam - 1] = 0;
  int x = 0,q = 0;
  do
  {
    q = 0;
    do
    {
      str2[q] = str1[x];
      x++;
      q++;
    }while(str1[x] != ' ' && str1[x] != 0);
    do
    {
      indice = existe (str1, str2, indice);
      printf("Retorno: %d\n", indice);
      if(indice != -1)
        quantidade++;
    }while(indice != -1);
  }while(x < tam);
  printf ("\nQuantidade: %d\n", quantidade);
  return 0;
}

mas no final não saberá qual  a qtd de vezes de cada palavra .  e então fazer como sugerido por  @Midori    seria o ideaL mesmo ,  armazenando cada huma das palavras da frase em um vetor de char , e no final comparar cada uma com as outras , e já escreve a palavra e o número de vezes que ela apareceu na frase .

  • Curtir 2

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