1234 - Sentença Dançante

Um PrObLeMa BeM tRaNqUiLo PaRa TrAdUzIr UmA mEnSaGeM pArA o MiGuXeS.

Descrição

Solução

A maior questão desse problema é entender que não se pode fazer qualquer tipo de trim(), strip() e outros tipos de manipulação de entrada que ignorem espaços antes e após a linha a ser lida. Em C, usei a função gets() para entrada por esse motivo também. Após lidar com a entrada problemática, outro detalhe é que só muda o estado de maiúscula para minúscula quando encontramos uma letra, espaços devem ser ignorados neste tratamento.

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

int main(){
    int n, maiuscula;
    char sentenca[51];

    while(gets(sentenca) != NULL){
        maiuscula = 1;
        n = strlen(sentenca);

        for(int i = 0; i < n; ++i){
            if(!isalpha(sentenca[i]))  continue;

            if(maiuscula)   sentenca[i] = toupper(sentenca[i]);
            else            sentenca[i] = tolower(sentenca[i]);
            maiuscula = 1 - maiuscula;
        }

        printf("%s\n", sentenca);
    }

    return 0;
}

Last updated