Substituição
Problema a resolver
Em uma cifra de substituição, nós "criptografamos" (ou seja, ocultamos de forma reversível) uma mensagem, substituindo cada letra por outra letra. Para fazer isso, nós usamos uma chave: neste caso, um mapeamento de cada uma das letras do alfabeto à letra à qual ela deve corresponder quando criptografamos. Para "descriptografar" a mensagem, o receptor da mensagem precisará saber a chave, para que ele possa reverter o processo: traduzindo o texto criptografado (chamado geralmente de texto cifrado) de volta para a mensagem original (chamada geralmente de texto claro).
Uma chave, por exemplo, pode ser a string NQXPOMAFTRHLZGECYJIUWSKDVB
. Esta chave de 26 caracteres significa que A
(a primeira letra do alfabeto) deve ser convertida em N
(o primeiro caractere da chave), B
(a segunda letra do alfabeto) deve ser convertida em Q
(o segundo caractere da chave) e assim por diante.
Uma mensagem como HELLO
, então, seria criptografada como FOLLE
, substituindo cada uma das letras de acordo com o mapeamento determinado pela chave.
Em um arquivo chamado substitution.c
em uma pasta chamada substitution
, crie um programa que permite que você criptografe mensagens usando uma cifra de substituição. No momento em que o usuário executa o programa, ele deve decidir, fornecendo um argumento de linha de comando, qual deve ser a chave na mensagem secreta que ele fornecerá em tempo de execução.
Demonstração
Especificação
Projete e implemente um programa, substitution
, que criptografa mensagens usando uma cifra de substituição.
- Implemente seu programa em um arquivo chamado
substitution.c
em um diretório chamadosubstitution
. - Seu programa deve aceitar um único argumento de linha de comando, a chave a ser usada para a substituição. A chave em si deve ser insensível a maiúsculas e minúsculas, portanto, qualquer caractere na chave ser maiúsculo ou minúsculo não deve afetar o comportamento do seu programa.
- Se o seu programa for executado sem nenhum argumento de linha de comando ou com mais de um argumento de linha de comando, seu programa deve imprimir uma mensagem de erro de sua escolha (com
printf
) e retornar demain
um valor de1
(que tende a significar um erro) imediatamente. - Se a chave for inválida (por não conter 26 caracteres, conter qualquer caractere que não seja um caractere alfabético ou não conter cada letra exatamente uma vez), seu programa deve imprimir uma mensagem de erro de sua escolha (com
printf
) e retornar da funçãomain
um valor de1
imediatamente. - Seu programa deve emitir
texto claro:
(sem uma quebra de linha) e, em seguida, solicitar ao usuário umastring
de texto claro (usandoget_string
). - Seu programa deve emitir
texto cifrado:
(sem uma quebra de linha) seguido pelo texto cifrado correspondente ao texto claro, com cada caractere alfabético no texto claro substituído pelo caractere correspondente no texto cifrado; caracteres não alfabéticos devem ser emitidos inalterados. - Seu programa deve preservar as maiúsculas e minúsculas: letras maiúsculas devem permanecer maiúsculas; letras minúsculas devem permanecer minúsculas.
- Depois de imprimir o texto cifrado, você deve imprimir uma nova linha. Seu programa então deve sair retornando
0
demain
.
Você pode achar uma ou mais funções declaradas em ctype.h
úteis, conforme manual.cs50.io.
Passo a passo
Como testar
Correção
Em seu terminal, execute o comando abaixo para verificar a correção do seu trabalho.
check50 cs50/problems/2024/x/substitution
Como usar debug50
Deseja executar debug50
? Você pode fazer isso da seguinte forma, depois de compilar seu código com sucesso com make
:
debug50 ./substitution KEY
em que KEY
é a chave que você fornece como um argumento de linha de comando para seu programa. Observe que a execução de
debug50 ./substitution
irá (de preferência!) fazer com que seu programa termine solicitando ao usuário uma chave.
Estilo
Execute o código abaixo para avaliar o estilo do seu código usando style50
.
style50 substitution.c
Como enviar
Em seu terminal, execute o comando abaixo para enviar seu trabalho.
submit50 cs50/problems/2024/x/substitution