Jump to content

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


lucas costa da cruz
 Share

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

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.

 Share

  • Recently Browsing   0 members

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