Ir ao conteúdo

Posts recomendados

Postado

Escreva um programa para ler 10 palavras (considere que cada palavra possui no máximo 30 caracteres). Contar e escrever a frequência de cada caractere presente em cada palavra.

quando aparece uma string ex (sartor) ele só conta um R, mas quando é ex (junnior) ele conta certo. alguém pode me ajudar?

#include <stdio.h>

main(){
    char str[30];
    int i, j,k, count = 0, aux = 0, c = 1;
    
	for(k=0; k<10;k++){
    puts("\nInforme uma palavra:");
    gets(str);

    while (str[count] != '\0'){
        count++;
    }

    for(i = 0; i < count; i++){ 
        aux = 1; 
        for(j = i + 1; j < count; j++){ 
            if(str[i] == str[j]){ 
                aux++; 
            } else
                break;
        }   
        if(i == 0) 
          c = 1; 
        else{
          for(j = i - 1; j >= 0; j--){ 
            if(str[i] != str[j])
              c = 1;
            else{ 
              c = 0;
              break;
            }
          }
        }
        if(c == 1){
        printf("\n%c : %d", str[i], aux);
    
    	}
	}
	}
}

 

Postado

@Helio Junnior Sartor Dalmolin      creio que essa lógica não esteja muito boa ,  essa parte aqui não vai funcionar bem , não ,

for(i = 0; i < count; i++)
{
    aux = 1; 
    for(j = i + 1; j < count; j++)
    { 
        if(str[i] == str[j])
        { 
            aux++; 
        } else     // se fOr diferente
            break; // sai do loop , e não verifica os outros carateres
    }   
}

e creio que seu código poderia ser assim    :

#include <stdio.h>
#include <windows.h>
void saindo();
void gotoyx(int,int);
int main()
{
    char str[30];
    int i, j,k, count = 0, aux = 0, c = 1;
    for(k=0; k<2;k++){
        puts("\nInforme uma palavra:");
        gets(str);
        count = 0;
        while (str[count] != '\0')  /  até encontrar o caractere nulo '\0'
            count++;  // contar qtd de caracteres da frase
        for(i = 0; i<count; i++)
        {
            aux = 1;
            for(j = i + 1; j < count; j++)
            {
                if(str[i] == str[j] && str[i] != '-')
                {
                    aux++;
                    str[j] = '-';
                }
            }
            if(str[i] != '-')
            {
              printf("Letra %c = %d vezes\n",str[i],aux);
            }
        }
    }
    saindo();
    printf("\n\n\n\n");
  return 0;
}
void gotoyx(int coluna,int linha)
{
    COORD c;
    c.X = coluna;
    c.Y = linha;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void saindo()
{
    int letras[8][5] =
    {
        {15,16,14, 1,30}, /* letra  S */
        {14,17,31,17,17}, /* letra  A */
        {14, 4, 4, 4,14}, /* letra  I */
        {17,25,21,19,17}, /* letra  N */
        {30,17,17,17,30}, /* letra  D */
        {14,17,17,17,14}, /* letra  O */
        { 0, 0, 0, 0, 0}, /* letra    */
        { 1, 2, 4, 0,16}, /* letra  ! */
    };
    int w,px,py,x;                            /* variáveis simples                       */
    HANDLE hOut;                              /* controle dos dispositivos do pc         */
    HBITMAP hb;
    long lg;
    hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
  
    GetBitmapBits(hb,lg,NULL);

    px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
    py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
    gotoyx(0,py+20);
    int y1=py+6,x1=50,y2=y1,x2=x1,j,i,a,b;    /*y1=linha inicial  y2 para recuperar a linha inicial*/
    for(i=0;i<8;i++){                     /*  sao 8 letras                                    */
        for(j=0;j<5;j++){                 /*o caractere é de 5 linhas                          */
            x1 = x2;
            a=letras[i][j];               /*pega o numero da 1 linha do caractere              */
            for(b=0;b<5;b++){             /*aqui eh um numero de apenas 8 bits                 */
                gotoyx(x1,y1);
                if(a % 2 != 0){           /*se bit 0 igual 1                                   */
                    printf("%c",219);     /*coloca espaço invertido senão coloca espaço normal */
                }
                else{
                    printf(" ");          /*senão coloca espaço normal                         */
                }
                a=a/2;                    /*dividindo numero por 2 desloca os bits para direita*/
                x1--;
                Sleep(10);
            }
            y1++;                   /*muda para proxima linha                                  */
            x1=x2;                  /*volta para a coluna inicial                              */
        }                           /*proxima linha                                            */
        x2=x2+6;                    /*avança 6 colunas posicionando para o prox caract         */
        y1=y2;                      /*volta para linha inicial                                 */
    }                               /*imprimiu o primeiro caractere                            */
    printf("\a");
}

 

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!