Ir ao conteúdo

Posts recomendados

Postado
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main(void){
   
    char texto[200];
	char palavra[26];
    int cont=0, i, j, n;
    
    scanf ("%d %s", &n, &palavra);
    
    if (0 <= n && n <= 200) {
    	
    	for (i=0; i<n; i++){
    		scanf ("%s", &texto);
		}	
	}
    
    for (i=0; i<strlen(texto); i++){
        
		for (j=0; j<strlen(palavra); j++){
            
			if (texto[i] == palavra[j]){
                cont++;
            }
        }
    }

    printf ("FREQUENCIA = %d", cont);
    return 0;
	 
}

PESSOAL ESTOU COM UM PROBLEMA NESSE CODIGO MEU, ESTOU TENTANDO IMPRIMIR A FRERQUENCIA DOS CARACTERS QUE EU DIGITEI NA ENTRADA, MAS ELE SO LE A PRIMEIRA LINHA DA ENTRADA

EXEMPLO:

n= quantidade de entradas

palavra= caracter que eu quero buscar em toda as linhas da entrada e somar pra colocar na frequencia

 

5 A        " =quero 5 entradas e quero contar quantas vezes aparece a letra A"

AAKS

KSKSA

SKSA

SKSK

AKSA

 

FREQUENCIA = 6  Correto, aparece 6 vezes a letra A nas entradas..

 

No meu caso ele so le a primeira linha das entradas, nao to conseguindo fazer com que ele leia todas as entradas, alguem poderia me ajudar?

Postado

@Henrique850 Remova o operador & nos scanfs para string (%s). Deve ser esse o problema,

 

scanf("%d %s", &n, palavra);
scanf("%s", texto);

 

Mas se for só para contar a frequência não precisa de string, acho assim mais simples.

 

#include <stdio.h>

int main(){
    int n, cont = 0;
    char c;

    scanf("%d %c",&n,&c);

    while(n-- >= 0){
        char ch;
        while((ch=fgetc(stdin)) != '\n'){
            if(ch == c){cont++;}
        }
    }
    printf ("FREQUENCIA = %d\n", cont);
    return 0;
}

 

 

  • Amei 1
Postado

@Midori Perfeito deu certinho aqui, ficou bem mais enchuto o codigo... Eu fiz daquele jeito com varias coisas porque ainda tenho que achar o "palindromas" e o "tamanho medio" das entradas pra colocar dentro desse codigo, por isso estava um pouco ate confuso de entender haha, mas a parte da frequência deu certinho, gostei da logica que a senhora usou, muito obrigadoo e bora termina haha (acho que pra eu achar agora o palindromas e o tamanho medio acho que precisa ser feito em strings...)

Postado

@Midori

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main(void){
   
	char caracter; 
	char texto[100];
	char inversa[100];
    int cont=0, n, i, valor;
    
    scanf ("%d %c", &n, &caracter);
    
    if (0 <= n && n <= 200) {
    
    while (n-- >= 0){

        while ( (texto[i]=fgetc(stdin)) != '\n') {
            
			if(texto[i] == caracter){
			cont++;
		    }
        }
    }
    cont++;
	}
	
	for(i=0; texto[i]; i++){
        texto[i] = tolower(texto[i]);
    }
    
    strcpy(inversa, texto);
    strrev(inversa);
    valor = strcmp(texto, inversa);
    
    if (valor == 0){
    	valor++;
	}
    
    printf ("PALINDROMAS = %d", valor);
    printf ("\nFREQUENCIA = %d", cont);
    return 0;
	 
}

Agora esta achando a frequencia certinho do que eu quero, o problema é que pra achar o palindromo ele so le a primeira linha de novo 😕 nao to conseguindo fazer ler todas estradas que eu coloquei e ir contando + 1 cada vez que for palindromo uma entrada...

Postado

@Henrique850  A função strrev não é padrão C, no compilador que estou usando não tem.

 

Mas não é necessário inverter a string toda, é só comparar cada char como um vetor. Você pode comparar, p.ex assim,

 

if(texto[i] == texto[n]){
    ...
    i++;
    n--;
}

 

Onde i é a variável que começa no primeiro índice e n no último.

 

Outra forma é usar um ponteiro e comparar com os índices da string, fiz assim na adaptação do código anterior para contar os palíndromos.

 

#include <stdio.h>

int main(){
    int n, cont = 0, contp = 0;
    char c, texto[100];

    scanf("%d %c",&n,&c);

    while(n-- >= 0){
        int i = 0, palindromo = 0;
        char ch, *p = texto;
        while((ch=fgetc(stdin)) != '\n'){
            if(ch == c){cont++;}
            texto[i++] = ch;
        }
        texto[i--] = 0;
        while(*p){
            if(*p++ == texto[i--]){
                palindromo = 1;
            }else{
                palindromo = 0;
                break;
            }
        }
        if(palindromo){contp++;}
    }
    printf ("FREQUENCIAS = %d\n", cont);
    printf ("PALINDROMOS = %d\n", contp);
    return 0;
}

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!