Corrigir letras maiúsculas no nome

Todos os dados do usuário deveriam ser verificados e ajustados conforme a natureza daquele dado. Por exemplo, a escrita correta de um nome envolve ter a primeira letra dos nomes e sobrenomes em maiúsculo. O exercício proposta envolve ajustar o nome informado pelo usuário de forma a obter a escrita padronizada.

Enunciado: elabore um algoritmo que leia o nome completo de uma pessoa e ajuste a escrita de forma que apenas a primeira letra dos nomes e sobrenomes estejam em letra maiúscula.

Para exemplificar, considere o nome escrito da seguinte forma: anA MAriA Souza. A forma padronizada deve ser: Ana Maria Souza.

Para fazer o algoritmo é importante conhecer 3 funções da biblioteca string.h, sendo elas:

  • strlen(): função que retorna a quantidade de letras de uma string passada por referência.
  • tolower(): função que recebe uma letra e retorna o correspondente dessa letra em minúsculo (se ela era uma letra maiúscula).
  • toupper(): função que recebe uma letra e retorna o correspondente maiúsculo dessa letra (se ela era uma letra em minúsculo).

A resolução para o enunciado é mostrada no código abaixo.

Na linha 5 é declarada e inicializada a string com um nome fictício. Observe que, na escrita do nome foram utilizadas letras maiúsculas e minúsculas de forma não convencional para um nome.

Na linha 6 é importante mencionar que declaração len = strlen(nome) é responsável por determinar quantas letras a variável possui. Calculo o tamanho da string com a strlen() para não precisar alterar o valor da variável toda vez que alterar o nome na declaração na linha 5.

O código das linhas 8-12 é responsável por inicialmente alterar todo o nome para deixar toda a escrita em letras minúsculas. Para isso são alteradas todas a letras da string para seu correspondente em minúsculo. O que já escrito em minúsculo continua em minúsculo e o que estava em maiúsculo é alterado para a letra em minúsculo.

A linha 15 é utilizada para alterar a primeira letra do nome para maiúsculo. Como o primeira letra já foi padronizada, observe que o laço for da linha 17 inicia com o valor de i=1, pulando essa primeira letra na análise (ela já está correta).

O código das linhas 17-22 é que faz a padronização final. É considerado que, entre os nomes e sobrenomes existe um espaço em branco. Com isso, esse trecho de código busca por um caractere de espaço em branco e, cada vez que localiza esse espaço, faz com que a próxima letra após o espaço seja transformada para maiúsculo. O incremento realizado na linha 20 faz com que, uma vez que a letra após o espaço já foi padronizada, não é necessário avaliar mais uma vez essa letra verificando se é um espaço em branco. Sendo assim, esse incremento é para diminuir a quantidade de letras que precisam ser avaliadas.

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

int main() {
    char nome[] = "ben gRa moR";
    int i, len = strlen(nome);

    //retira as letras maiúsculas
    for (i=0; i<len; i++) {
        nome[i] = tolower(nome[i]);
    }
    printf("Nome todo em minúsculo: %s\n", nome);

    //adiciona as letras maiúsculas
    nome[0] = toupper(nome[0]);

    for (i=1; i<len; i++) {
        if (nome[i] == ' ') {
            nome[i+1] = toupper(nome[i+1]);
            i++;
        }
    }

    printf("Nome padronizado: %s", nome);
}

O incremento feito na linha 20 faz com que o laço de repetição não avalie a próxima letra já que ela não será um caractere em branco. Isso porque foi considerado que o nome está escrito com o espaçamento correto (um espaço em branco separando nomes e sobrenomes). Se não existe essa certeza, o melhor é dispensar o uso de incremento.

Teste o código em: https://ideone.com/FF96TO

Share

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.