>> ZAMYLA CHAN: Parabéns em terminar o seu
primeiro par de programas em C.
Eu sei que a sua primeira incursão no Sintaxe C pode ser assustador.
Mas garanto-lhe, no final do Claro, você vai ser capaz de olhar para o
primeiro par de atribuições e concluí-las em poucos minutos.
>> Agora que você está ficando mais familiarizado com a sintaxe, vamos começar a César.
Em César, o usuário deverá apresentar um chave número inteiro como uma linha de comando
argumento, em seguida, digite uma planície mensagem de texto no prompt.
O programa irá então cifrar o texto e impressão
sua mensagem de texto cifrado.
>> A cifragem de César é bastante simples.
Deslocar cada letra, em sua texto simples, pela chave.
Como resultado, é também muito inseguro.
Mas a implementação César irá introduzir nos ASCIIMath e matriz de dados
estruturas.
Nós vamos chegar a mais complexa cifras posteriores.
Com uma chave de César de 2, a letra A em texto simples seria representado por
a letra C em texto cifrado, porque C é de duas letras após A. B seria
representado por D e C por E. Rumo o fim do alfabeto, W é
representado por Y e X, Y Z. Mas não tem duas letras para depois, de modo
as cifras envolve o alfabeto.
Y em texto simples é, portanto, representado por Um em texto cifrado, e Z por B. Pode
ajudar a ver o César como Cypher uma roda alfabeto contínua.
>> Para codificar seu texto, o usuário entrará dois argumentos
na linha de comando -
. / Caesar seguido por uma chave.
Como sempre, não podemos confiar em que o usuário completamente para entrar entrada que fazer
sentido para o nosso programa.
Então nós vamos ter que validar o seu entrada de linha de comando.
>> Em vez de usar int void main, estamos usando int main, argc int, string argv.
O argc variável inteira representa o número de argumentos passados ​​para
na linha de comando.
E argv é um array, ou pensar nele como uma lista, dos argumentos passados ​​dentro
>> Assim, para César, como é que vamos validar entrada do usuário?
Bem, eles só devem estar entrando dois argumentos de linha de comando -
. / Caesar e uma chave.
Então, se não é argc 2, o que significa que ou eles esqueceram a chave e só
entrou. / caesar, ou eles entrou várias chaves.
>> Se este for o caso, então você vai deseja imprimir instruções
e sair do programa.
Eles vão precisar para tentar novamente a partir da linha de comando.
Mas mesmo se argc é 2, você vai precisa verificar se eles
dar-lhe uma chave válida.
Para Caesar, você precisa de um número inteiro.
Mas argv é uma matriz de strings.
Como você acessa a chave?
>> Um rápido olhar para as matrizes -
estruturas de dados que possuem múltipla Os valores de dados do mesmo tipo.
As inscrições são com índice zero, o que significa que o primeiro elemento é o índice zero
e o último elemento é pelo tamanho do índice menos 1, em que tamanho é o número de
elementos na matriz.
>> Se eu declarei uma nova caixa de correio matriz de cadeia de comprimento 3, visualmente, ele
parecido com este.
Três recipientes para cordas , Lado a lado.
Para aceder a qualquer elemento, você digita o nome da matriz e, em seguida, indicam
o índice entre colchetes.
Aqui, vou atribuir um valor a cada elemento, assim como eu faria com qualquer
outra variável string.
>> Então, para acessar nossos argumentos de linha de comando, tudo o que temos a fazer é acessar
o elemento de direito da matriz argv.
Se o usuário entrou Team. / Decolagem Foguete no terminal, argv 0 seria
ser. / decolagem.
argv seria Team, e arg2 seria foguete.
>> Agora que podemos acessar a nossa chave, ainda precisamos fazer
certeza de que ele está correto.
Nós precisamos convertê-lo em um número inteiro.
Mas não podemos apenas lançar como fizemos anteriormente.
Felizmente, para a função A Y cuida isso para nós e até mesmo retorna 0
se a cadeia não pode ser convertido para um número inteiro.
Cabe a você, no entanto, para dizer o usuário por que você não vai
deixar o programa prosseguir.
Armazenar o resultado de um de Y numa inteiro, e lá você tem a sua chave.
A próxima parte é simples.
Solicitar ao usuário o seu texto simples, que será de dados tipo string.
Felizmente para nós, todos os usuários inseridos cordas são válidos.
>> Agora que temos todos os meios necessários do usuário, é tempo para nós
codificar sua mensagem.
O conceito de César é simples o suficiente para entender.
Mas como é que o computador sabe que letras vir após o outro?
>> Aqui é onde a tabela ASCII vem dentro
Cada personagem tem um número inteiro número associado a ele.
A Capital é 65.
Capital B é 66.
Minúsculas um é 97.
Minúsculas b é 98.
Mas os personagens não se limitam para apenas números alfabéticos.
Por exemplo, o símbolo @ 64 é o número ASCII.
>> Antes de lidar com toda a corda, vamos fingir que nós apenas temos que mudar
um personagem.
Bem, nós só queremos mudar real letras no texto simples, não
caracteres ou números.
Então a primeira coisa que vamos querer verificar é se o personagem está em
o alfabeto.
>> O isalpha função faz isso para nós e retorna um valor booleano -
verdadeiro se os personagens é uma carta, falso em caso contrário.
Duas outras funções úteis são isupper e islower, com
nomes auto-explicativos.
Eles retornam verdadeiro se o caráter dado é maiúscula ou minúscula,
respectivamente.
Uma vez que eles são booleanos, eles são útil para usar como condições.
>> Se isalpha retorna verdadeiro, você vai precisar para mudar o personagem pela chave.
Então, vamos abrir a ASCIIMath e fazer um pouco de matemática ASCII.
A utilização é muito semelhante ao do uso para César e leva em uma chave no
linha de comando.
>> Se eu executar ASCIIMath 5, parece adicionar Cinco para um, dando-me a letra f, e
exibindo o valor ASCII.
Então, vamos dar uma olhada no programa.
>> Você pode se perguntar, aqui, por carta é um número inteiro, quando está
claramente, também, uma carta.
Acontece que os personagens e inteiros são intercambiáveis.
Ao colocar a letra A em um único aspas, o inteiro pode armazenar
o valor ASCII do capital A. Tenha cuidado, porém.
Você precisa das roupas simples.
Sem as aspas simples, o compilador iria procurar uma variável
chamado A, e não o personagem.
>> Então eu adiciono carta e uma chave, armazenando o soma das variáveis ​​int resultado.
Embora resultado é do tipo de dados inteiro, a minha declaração printf utiliza o
% C espaço reservado para os personagens.
Assim, o programa imprime o caráter relacionado com o resultado inteiro.
E já que impresso o número inteiro forma bem usando% d, vemos
o número bem.
Então, agora você pode ver que nós tratar personagens e
números inteiros, e vice-versa.
>> Vamos teste fora ASCIIMath alguns mais vezes usando 25 como uma chave.
Ficamos com a letra z.
Agora vamos tentar 26.
Queremos chegar a letra a, mas em vez disso temos um suporte esquerdo.
Então, obviamente, apenas adicionando o chave para a carta não vai fazer.
Precisamos descobrir uma fórmula para embrulhar todo o alfabeto, como o nosso
exemplo, no início fez.
>> A fórmula para o César mudança é como se segue.
c é igual p mais k modulo 26.
Lembre-se que modulo é um instrumento útil operação que nos dá a restante
de dividir um número pelo outro.
Vamos aplicar esta fórmula para a planície carta de texto com uma chave de 2.
O valor ASCII y é 89, que dá-nos 91 modulo 26,
o que equivale a 13 -
definitivamente não é o valor ASCII de a, que é 67.
>> Humor me agora e afastar-se do Valores ASCII para um índice alfabético
onde A é zero e Z é 25, o que significa que Y é 24.
24 + 2, módulo 6, nos dá 26, modulo 26, 0, que é o
índice alfabético de um.
Portanto, esta fórmula parece se aplicar ao índice alfabético da carta e
não o seu valor ASCII.
>> Mas você começa com os valores ASCII.
E para imprimir o caráter cifrado, você vai precisar de seu valor ASCII também.
Cabe a você, então, para descobrir como mudar e para trás.
>> Depois de descobrir a fórmula certa para uma personagem, tudo o que você precisa fazer
se aplicar a mesma fórmula para cada letra no texto simples -
apenas se a carta está em ordem alfabética, claro.
E lembre-se de que você precisa para preservar o caso, superior ou inferior, que é onde
as funções IsLower isupper e mencionado anteriormente virá a calhar.
Você pode ter duas fórmulas -
um para letras maiúsculas e um para letras minúsculas.
Então isupper um eMinusculo irá ajudá-lo determinar qual a fórmula que se aplica.
>> Como você aplica a fórmula para cada único caractere em uma string?
Bem, uma string é apenas um matriz de caracteres.
Assim, você pode acessar cada personagem, agrupamento sobre cada personagem do
cordas em um loop for.
Quanto à condição de loop for, a função strlen, por corda
comprimento, virá a calhar.
Leva em uma string como entrada e retorna o comprimento dessa corda.
Certifique-se de incluir a biblioteca direita para usar a função comprimento da corda.
>> E aí você tem o texto cifrado.
Meu nome é o Zamyla.
E [CODE falando].