Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

@Alline Ribeiro Se você for analisar, esses if's, vai perceber que o ultimo else sempre será usado, pelo menos quando o

if(frases[i] == '') 

for falso.

Então dentro dos if's, use continue; assim eles não serão usados quando verdadeiros. 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!