Ola queridos!
Estou com um problema neste codigo!
/*5. Júlio César, o imperador romano, usava a Cifra de César para enviar ordens secretas aos seus generais.
Este código consiste em trocar cada letra de uma mensagem pela terceira letra seguinte.
Ou seja, a letra ‘a’ é substituída por ‘d’, ‘b’ é substituída por ‘e’, ‘c’ é substituída por ‘f’, e assim por diante.
As exceções são as três últimas letras do alfabeto, ‘x’, ‘y’ e ‘z’, que são substituídas, respectivamente, por ‘a’, ‘b’ e ‘c’.
Por exemplo, a palavra “zebra” se transformaria em “cheud”.
Escreva uma função que codifique uma mensagem de acordo com a Cifra de César,
aplicando a codificação apenas às letras da mensagem, maiúsculas ou minúsculas, e preservando os demais caracteres.
Essa função deve receber como parâmetro uma cadeia de caracteres com a mensagem a ser codificada e retornar o ponteiro
para uma nova cadeia de caracteres, alocada dinamicamente, com a mensagem codificada. A cadeia de caracteres original não
pode ser alterada. A função deve ter o seguinte protótipo:*/
Este é o meu codigo :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * comparacao (char *frases);
void main(){
char frase[20], *volta;
int numero=0, i;
printf("Digite a frase de apenas 20 caracters: ");
gets(frase);
numero=strlen(frase);
volta=comparacao(frase);
printf("\n");
for(i=0; i<numero;i++){
printf("%c ", volta[ i ]);
}
return 0;
}
char * comparacao (char *frases){
int numero=strlen(frases);
char *letra, i ;
letra = (char*) malloc(numero*sizeof(char));
for(i=0; i<numero; i++){
if(frases[ i ] == 'z'){
letra[ i ]='c';
}if(frases[ i ] == 'y'){
letra[ i ]='b';
} if(frases[ i ] == 'x'){
letra[ i ]='a';
}if(frases[ i ]==' '){
letra[ i ]=' ';
}else {
letra[ i ]=frases[ i ]+3;
//printf("\n letra [%d]: %c e letra[%d] t : %c", i ,frases[ i ], i ,letra [ i ]);
}
}
//for(i=0; i<numero; i++){
// printf(" %c ", letra[ i ]);
// }
return letra;
}
Então o problema é quando eu digito a letra z ou x ou y mais de uma vez ele não entra no if.