Jump to content

Problema com espaço na Cifra de César


William Minerva

Recommended Posts

Oi gente, bom dia, tudo bem? Eu preciso fazer um programa que leia uma frase e que em seguida cada letra do texto seja substituída por outra fazendo uma troca de 3 posições. Por exemplo: a letra A vira letra D, a letra B vira letra E e assim por diante. O problema é que o programa que eu construí ela lê apenas uma palavra mas não lê o resto que eu escrevo. Por exemplo: quando eu escrevo a palavra "CACHORRO CANSADO" o programa lê apenas a palavra "CACHORRO" e me retorna "FDFKRUUR" mas não lê a palavra "CANSADO", o programa considera apenas a primeira palavra que eu escrevo, por que isso está acontecendo? Como posso resolver esse problema?

Eu escrevi o programa da seguinte forma:

#include <stdio.h>
#include <string.h>

void cifrar( char * saida, const char * entrada, int chave )
{
    int i = 0;
    int tam = strlen(entrada);

    for( i = 0; i <= tam; i++ )
    {
        if( (entrada[i] >= 'a') && (entrada[i] <= 'z') )
        {
            saida[i] = (((entrada[i] - 'a') + chave) % 26) + 'a';
        }
        else if( (entrada[i] >= 'A') && (entrada[i] <= 'Z') )
        {
            saida[i] = (((entrada[i] - 'A') + chave) % 26) + 'A';
        }
        else
        {
            saida[i] = entrada[i];
        }

    }
}


void decifrar( char * saida, const char * entrada, int chave )
{
    int ch = 0;
    int i = 0;
    int tam = strlen(entrada);

    for( i = 0; i <= tam; i++ )
    {
        if( (entrada[i] >= 'a') && (entrada[i] <= 'z') )
        {
            ch = (entrada[i] - 'a') - chave;
            if( ch < 0 ) ch += 26;
            saida[i] = ch + 'a';
        }
        else if( (entrada[i] >= 'A') && (entrada[i] <= 'Z') )
        {
            ch = (entrada[i] - 'A') - chave;
            if( ch < 0 ) ch += 26;
            saida[i] = ch + 'A';
        }
        else
        {
            saida[i] = entrada[i];
        }

    }
}

int main( int argc, char * argv[] )
{
    char original[100];

    scanf("%s", original);

    char cifrado[100];

    cifrar( cifrado, original, 3 );

    printf("%s", cifrado);

    return 0;

Edited by William Minerva
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...