Jump to content

Ler uma frase e contar quantos caracteres são espaços em branco


lucas costa da cruz

Recommended Posts

boa noite fiz esse exercício e não tenho certeza se está de acordo com o enunciado pode me ajudar por favor  

3- Ler uma frase e contar quantos caracteres são espaços em branco

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

int main(void) {
    // variáveis
    char texto[12];              // vetor que recebe a entrada feita pelo usuário
    int i, j, contador=0;         // variáveis para controlar o loop principal, secundário e a quantidade de caracteres encontrados, respectivamente
    char vogais[] = "aeiouAEIOU"; // vetor de vogais

    // captura do texto que será digitado pelo usuário
    printf("Digite sua frase: ");
    gets(texto);

    // contagem de vogais da entrada feita pelo usuário
    int ContadorEspacos=0;

    for (i=0; i<strlen(texto); i++) {
        if (texto[i] == ' ') {
            ContadorEspacos++;
        }

        for (j=0; j<strlen(vogais); j++){
            if (texto[i] == vogais[j]) {
                contador++;
            }
        }
    }

    // exibição do número de vogais encontrados
    if (contador == 1) {
        printf("\n\no texto informado possui 1 vogal\n\n");
    } else {
        printf("\n\no texto informado possui %d vogais\n\n", contador);
    }

    return 0;
}


 

Link to comment
Share on other sites

  • Administrators

Bom dia, @lucas costa da cruz, tudo bem?

Eu precisei editar seu post original pra formatar o código como código (é só clicar no botão <> aqui do editor na hora de postar). Pode fazer isso da próxima vez que postar código, por gentileza? ?

Também fiz as seguintes edições no seu código, para melhorar a visualização:

  • Indentação: aninhei os códigos dentro dos blocos {}
  • Espaços: pus espaços entre coisas como include<arquivo> e for (i=0;i<...;i++), etc.
  • Coloquei os comentários das declarações de variáveis alinhados.
  • Adicionei também um espaço depois do caractere ":" (dois pontos) na linha "Digite sua frase: ". 

Tudo isso foi pra deixar o código melhor pra quem for te ajudar, inclusive pra você mesmo ler.

Agora em relação à lógica do programa em si, me parece que você modificou um programa que já contava vogais para agora contar espaços, foi isso? Achei inteligente fazer isso, parabéns! ?

A sua contagem está certa. Só faltou imprimir o valor da variável ContadorEspacos. E nem precisa usar um condicional (if) pra testar se é maior que zero. Basta imprimir o valor dela, mesmo que seja zero.

Mais uma coisa: você aloca um vetor de apenas 12 posições com char texto[12]. Isso vai fazer com que sua frase não possa ter mais do que 11 caracteres. Eu usaria pelo menos uns 255. ?

NOTA: O seu programa possui um bug de segurança ao combinar um buffer que pode ser facilmente estourado com o uso da função gets(), mas este assunto foge do tema da lógica de programação em si, e acredito que este exercício seja para treinar sua lógica, então abrir este assunto com seus professores pode desviar muito, mas se quiser saber mais sobre o assunto, é só googlar por "buffer overflow".

Um abraço!

Link to comment
Share on other sites

1 hora atrás, Fernando Mercês disse:

A sua contagem está certa. Só faltou imprimir o valor da variável ContadorEspacos. E nem precisa usar um condicional (if) pra testar se é maior que zero. Basta imprimir o valor dela, mesmo que seja zero.

A contagem não está certa: o que deveria ser contado é a quantidade de caracteres de espaço em branco:

  • ' '     space                   (SPC)
  • '\t'    horizontal tab      (TAB)
  • '\n'    newline               (LF)
  • '\v'    vertical tab         (VT)
  • '\f'    feed                     (FF)
  • '\r'    carriage return    (CR)

O autor poderia usar isspace() da ctype, que verifica se o caractere passado como argumento é um caractere de espaço em branco e retorna um valor diferente de 0 caso seja e 0 caso não seja. A verificação poderia ser manual também, com uma string constante de preferência com todos caracteres de espaço em branco e um loop, assim como fez pra contar as vogais.

Link to comment
Share on other sites

  • Administrators

Bem lembrado. Mas tem um ponto.. Eu acho que a gente deve considerar o que o aluno está estudando (admitindo que isso é um exercício de um curso de programação). Normalmente, em enunciados deste tipo, que miram a lógica, considerar tabulações verticais e outros caracteres é um pouco "demais". Usar a isspace() provavelmente vai na mesma linha. Mas concordo que sua consideração é mais completa. Se quem passou o exercício falou de outros caracteres, e/ou falou da isspace() - o que pode ter acontecido vide a inclusão do ctype.h pelo @lucas costa da cruz -, você está certíssimo. Do contrário, comparar com ' ' deve ser suficiente. ?

Um abraço,

Fernando

Link to comment
Share on other sites

  • 3 weeks later...
  • 7 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...