Implemente as seguintes funções retiradas de enunciados de exames.
3.1 char *repetições(char *s)
Recebe uma string, retirando-lhe todos os caracteres que não se encontram repetidos.
repeticoes(“ALFACE”)→ “AA”
repeticoes(“ALTA FIDELIDADE”)→ “ALAIDELIDADE”
Passo 1
Fala aí! Essa aqui vai dar um pouquinho de trabalho, mas relaxa que não é nada muito complicado. Olha só como vamos começar:
Declaramos uma string freq, que irá armazenar a frequência com que cada caractere c aparece e os ponteiros para char *origem e *destino são, respectivamente, as strings inicial e final, antes e após termos removido os caracters.
Passo 2
Beleza, feito isso, vamos passar o endereço de s para origem e, logo em seguida, abrir um loop for da seguinte forma:
Perceba que a primeira e a última instrução do for são iguais, pois queremos tanto inicializar c como *origem ao mesmo tempo em que incrementamos isso, para que os caracteres c sejam comparados com cada caractere de origem.
Logo em seguida, iniciamos uma instrução switch case, que vai nos ajudar a identificar a frequência com que cada caractere aparece. Caso o caractere seja novo (só apareça uma vez), definimos freq igual a 1 (linha 16), caso seja um caractere repetido, definimos igual a 2.
Passo 3
Seguindo em frente, devemos novamente passar o endereço de s para origem e destino, pois usaremos esses ponteiros agora.
Então, abrimos um for da mesma forma que fizemos anteriormente, dessa vez para copiar os caracteres duplicados para destino. Para isso, vamos usar as informações que armazenamos em freq por meio da instrução switch.
Fazemos isso por meio de uma instrução if que, dentro do for, irá copiar cada um dos caracteres que foram encontrados pelo switch, lá na linha 19, para a nova string destino. Para finalizar, é muito importante que não nos esqueçamos de delimitar essa string com o caractere \0, para não obtermos nenhum erro!