Implemente as seguintes funções retiradas de enunciados de exames.
3.15char *lower_upper(char *s)
Recebe uma string de caracteres alfabéticos e coloca todos os caracteres em minúsculas, alinhados à esquerda, pela mesma ordem em que aparecem. Os que estão em maiúsculas são alinhados, pela mesma ordem, à direita.
Lower_uper(“EraUmaVezUMCavalo”) ”ramaezavaloEUVUMC”
Passo 1
Fala aí! Essa aqui pode dar um trabalhinho, mas se acompanhar desde o começo garanto que vai pegar o jeito. A ideia do programa vai ser mais ou menos o seguinte: vamos encontrar um jeito de percorrer por cada caractere da string e identificar se são maiúsculos ou minúsculos, caso sejam o primeiro, vamos passando-os um a um para o final da string e, caso contrário, vamos passando-os para o começo. Se liga em como isso vai ser feito, vamos começar declarando nossas variáveis:

Como de praxe, i será usada para percorrer nossa string, troca vai ser responsável por dizer ao nosso programa se deve continuar ou parar e tmp é uma variável auxiliar.
Passo 2
Agora vamos abrir um loop while da seguinte forma:

O que isso quer dizer? Olha só, anteriormente, definimos troca = 1, o que quer dizer que ainda existem caracteres fora de seus lugares. Então, aqui estamos basicamente dizendo: enquanto troca for igual a 1, faça as instruções a seguir. Ignore esse troca = 0 na linha 11 por enquanto, já já você vai entender melhor.
Passo 3
Ainda dentro do while, passamos para um laço for, que vai ser o cara responsável por percorrer nossa string.

Agora, o que queremos mesmo fazer com os caracteres dessa string? Queremos identificar se são maiúsculos ou minúsculos e alinhá-los ou à esquerda ou à direita.
Fazemos isso por meio daquele if na linha 14. Ali, usamos as funções isupper e islower, que são capazes de reconhecer a capitalização dos caracteres. Feito isso, passamos à instrução do if, vamos dizer mais ou menos o seguinte:
Se o caractere na posição s[i] for maiúsculo E o caractere na posição s[i+1] for minúsculo
{
Passe o valor de s[i] para tmp;
Passe o valor de s[i+1] para s[i];
Passe o valor de tmp para s[i+1];
E faça troca igual a 1;
}
Não ficou claro? Deixa que eu desenho. Vamos supor a string “Era”, com s[i] = ‘E’ e s[i+1] = ‘r’, como a condição do if foi satisfeita, vamos executar as instruções. Primeiramente, fazemos tmp = s[i].

Em seguida, passamos o valor de s[i+1] para s[i]. A string fica provisoriamente assim:

Próximo passo, passar o valor de tmp para s[i+1]:

Prontinho! Conseguimos trocar esses dois caracteres de lugar. Massss, como queremos que o “E” fique lá no canto direito, definimos troca igual a 1, para que todo esse processo seja feito novamente. Ah, entendeu por que definimos troca igual a 0 lá na primeira linha do while? É porque se a condição do if não for satisfeita, quer dizer que a string já está do jeito que queremos, aí o valor da variável de controle não volta a ser 1 (pois este comando está dentro do if) e podemos finalmente sair do loop while.
Para finalizar, é só retornarmos o valor da string s, para podermos passar o resultado quando essa função for chamada lá no main. E tá tudo pronto na nossa função! Quando a gente entende como funciona, programação fica bem mais legal, né? 😊
Resposta
