Context:
I am trying to develop a code that is able to remove all the aeiou
vowels from any phrase and save the position that was the vowel in the sentence so that it is possible to reconstruct the phrase again using what was saved as a hypothetical example of " compression / decompression. "
Problem: The part of removing the vowels is ok, but to put them back is presenting problem with certain words.
Simple words like macaco
remove the vowels and replace them normally, but words like papaia
, which have vowels in a row, it returns 'potato', which runs out of the necessary.
An example of proper operation:
Digite uma frase simples para compressão:warning: this program uses gets(), which is unsafe.
macaco
---------- RESULTADO DA COMPRESSÃO ----------
Sua mensagem comprimida é: mcc
Sua mensagem comprimida tem length: 3
Sua mensagem descomprimida é: [m][a][c][a][c][o]
Sua mensagem descomprimida tem length: 7
A compressão poupou: -1
-------------------------------------------
Program ended with exit code: 0
Example of the problem mentioned:
Digite uma frase simples para compressão:warning: this program uses gets(), which is unsafe.
papaia
---------- RESULTADO DA COMPRESSÃO ----------
Sua mensagem comprimida é: pp
Sua mensagem comprimida tem length: 2
Sua mensagem descomprimida é: [p][a][p][a]
Sua mensagem descomprimida tem length: 7
A compressão poupou: -1
-------------------------------------------
Program ended with exit code: 0
Code:
char vogaisEncontrada[100];
int main()
{
char fraseOriginal[100],
fraseCompactada[100],
fraseDescompactada[100];
int fraseOriginalLen,
fraseFinalLen;
printf("Digite uma frase simples para compressão:");
gets(fraseOriginal);
fraseOriginalLen = strlen(fraseOriginal);
printf("---------- RESULTADO DA COMPRESSÃO ----------");
// COMPACTA //
int c,
cV = 0;
for(c = 0; c <= fraseOriginalLen; c++) {
if(fraseOriginal[c] == 'a') {
vogaisEncontrada[c - cV] = 'a';
cV++;
} else if(fraseOriginal[c] == 'e') {
vogaisEncontrada[c - cV] = 'e';
cV++;
} else if(fraseOriginal[c] == 'i') {
vogaisEncontrada[c - cV] = 'i';
cV++;
} else if(fraseOriginal[c] == 'o') {
vogaisEncontrada[c - cV] = 'o';
cV++;
} else if(fraseOriginal[c] == 'u') {
vogaisEncontrada[c - cV] = 'u';
cV++;
} else if(strlen(&fraseOriginal[c]) > 0) {
vogaisEncontrada[c] = ' ';
fraseCompactada[c - cV] = fraseOriginal[c];
}
}
// COMPACTA //
printf("\nSua mensagem comprimida é: %s", fraseCompactada);
fraseFinalLen = strlen(fraseCompactada);
printf("\nSua mensagem comprimida tem length: %d", fraseFinalLen);
printf("\n\nSua mensagem descomprimida é: %s", fraseDescompactada);
// DESCOMPACTA //
int c1;
for(c1 = 0; c1 <= fraseOriginalLen; c1++) {
if((vogaisEncontrada[c1] == ' ') && (strlen(&fraseCompactada[c1]) > 0)) {
printf("%c", fraseCompactada[c1]);
} else if((strlen(&fraseCompactada[c1]) == 0) && (strlen(&vogaisEncontrada[c1]) > 0) && !(vogaisEncontrada[c1] == ' ')) {
printf("%c", vogaisEncontrada[c1]);
} else if((strlen(&fraseCompactada[c1]) > 0) && !(vogaisEncontrada[c1] == ' ')) {
printf("%c", vogaisEncontrada[c1]);
printf("%c", fraseCompactada[c1]);
}
}
// DESCOMPACTA //
fraseFinalLen = c1;
printf("\nSua mensagem descomprimida tem length: %d\n", fraseFinalLen);
printf("\nA compressão poupou: %d\n", (fraseOriginalLen - fraseFinalLen));
printf("-------------------------------------------\n");
return 0;
}