Escreva um programa que leia nomes completos do teclado e os escreva na tela no formato Sobrenome, Nome sem Sobrenome.
Nome: João Carlos Cunha
Cunha, João Carlos
Nome: Catarina BATISTA
Batista, Catarina
Colocando apenas a primeira letra de cada nome em MAIÚSCULAS.
O processamento termina quando o utilizador introduzir a string SAIR escrita com minúsculas ou maiúsculas.
Nota: Pode utilizar todas as funções anteriormente implementadas.
Passo 1
Essa aqui vai dar um pouquinho de trabalho, mas vamos seguir um passo de cada vez que fica bem tranquilo. Olha só, como sugerido pelo enunciado, vamos ter que definir algumas funções auxiliares que você pode ter encontrado anteriormente.
Vamos começar pela strcountc, que irá contar quantas vezes o caractere ch aparece na string s. Ela vai ficar assim:
Começamos definindo nossas variáveis, i funcionará como o índice da string e cont é um contador que será incrementado sempre que o caractere ch for encontrado. Para isso, basta abrirmos um laço for para percorrermos por cada caractere da string e, dentro dele, iniciamos um if para fazer uma comparação entre cada um deles e o caractere ch. Caso a comparação seja verdadeira, incrementamos cont.
Passo 2
Vamos para a próxima. Essa aqui vai ser usada pra definir a primeira letra de cada nome como maiúscula. Nós vamos usar as funções toupper e tolower, que já são funções conhecidas e capazes de passar caracteres para maiúsculas ou minúsculas, para isso, só precisamos colocar um #include
Dá só uma olhada em como fica nossa função:
Definimos a variável i, que será utilizada para percorrer nossa string logo em seguida e já podemos de cara também definir o primeiro caractere, s[0], como maiúsculo. Depois disso, vamos passar para nosso laço for e percorrer pela string. Dentro dele, abrimos uma condição if – else que vai ser responsável por identificar se o caractere anterior é um espaço (linha 13). Caso isso ocorra, definimos o caractere atual para maiúsculo; caso contrário, o definimos para minúsculo. Dessa forma, conseguimos garantir que os únicos caracteres maiúsculos serão as primeiras letras de cada palavra.
Passo 3
Beleza, por enquanto tudo tranquilo, né? Agora vamos passar para a função principal do programa. Aqui, vamos identificar nome e sobrenome e separá-los da maneira que o enunciado pede.
Começamos assim:
Como variáveis, i e j serão os índices das strings nome e sobrenome, respectivamente. Uma vez declaradas, iniciamos um if que utilizará a função previamente definida strcountc para identificar se existem espaços em branco na string nome – essa parte serve simplesmente para identificar se existe um sobrenome, ou se foi inserido apenas o primeiro nome.
Caso só haja o primeiro nome, já podemos zerar a string sobrenome, definindo seu primeiro caractere como \0. Além disso, já vamos imprimir também o nome inserido de volta para o usuário usando a função wordupr, definida no passo anterior, só para deixar a formatação mais bonitinha.
Feito tudo isso, vamos iniciar nosso famoso for, mas dessa vez de um jeito um pouquinho diferente:
Aquela primeira instrução que passamos para o for, a de inicialização, vai dizer para iniciarmos a leitura lá pelo final da string. Isso, quando combinado com a instrução de parada (nome[i] != ‘ ‘), vai realizar o comando na linha debaixo de trás para frente, até que um espaço em branco seja encontrado. Com isso, copiamos a última letra da string nome para a primeira da sobrenome, a penúltima para a segunda e assim por diante, até que seja encontrado um espaço em branco.
Em seguida, vem a finalização. Vamos definir o delimitador de sobrenome em seu índice j para não obtermos nenhum erro de leitura e redefinimos o delimitador de nome para excluirmos a palavra copiada da string final.
A linha 51 vem para inverter a string sobrenome por meio da função strrev. Isso se faz necessário, porque copiamos a palavra de trás para frente! Então, precisamos passá-la para a ordem correta antes de imprimir os nomes para o usuário.
Passo 4
Enfim, chegamos no main. A esse ponto nosso programa já está quase finalizado, falta só darmos a instrução inicial para o usuário e mais alguns detalhezinhos. Olha só como fica:
Precisamos definir novamente as strings nome e sobrenome para começar. Utilizaremos nome para receber a entrada do usuário.
A linha 66 serve para identificar quando o usuário deseja sair do programa. Ao utilizarmos a função stricmp, é feita uma comparação entre a entrada do usuário (que foi armazenada em nome) e a string “sair”, caso ambas sejam equivalentes, utilizamos um break para encerrar o programa.
Agora, caso a comparação anterior falhe, invocamos a função separa_nomes para realizar todas as instruções que escrevemos anteriormente 😊
Resposta
Resposta nos passos.