>> ZAMYLA CHAN: Felicitaciones Ha terminado el
primer par de programas en C.
Sé que su primera incursión en Sintaxis de C puede ser desalentador.
Pero te aseguro que al final de la Por supuesto, usted será capaz de mirar a la
primer par de tareas y completarlos en cuestión de minutos.
>> Ahora que usted está consiguiendo más familiar con la sintaxis, vamos a llegar a César.
En Caesar, el usuario deberá presentar una clave de entero como una línea de comandos
argumento, a continuación, introduzca una llanura mensaje de texto en el indicador.
El programa entonces cifrar el texto e imprimir
su mensaje de texto cifrado.
>> El cifrado de César es bastante simple.
Cambie cada letra, en su texto plano, por la clave.
Como resultado de ello, es también bastante inseguro.
Pero la implementación de César introducirá nosotros ASCIIMath y matriz de datos
estructuras.
Vamos a llegar a lo más complejo sistemas de cifrado más tarde.
Con una llave de César 2, la letra A en texto plano estaría representado por
la letra C en el texto cifrado porque C es de dos letras después de A. B serían
representada por D y C de E. Hacia el final del alfabeto, W es
representado por Y, y X por Z. Pero Y no tiene dos letras después de que, por lo
las cifras se envuelve alrededor del alfabeto.
Y en texto plano se representa así por A en texto cifrado, y Z por B. Se puede
ayudará a ver el Caesar Cypher como una rueda alfabeto continua.
>> Para cifrar su texto, el usuario entrarán dos argumentos
en la línea de comandos -
. / César seguida de una tecla.
Como siempre, no podemos confiar en el usuario completamente para entrar de entrada que crea
sentido para nuestro programa.
Así que vamos a tener que validar su entrada de línea de comandos.
>> En lugar de utilizar void main int, estamos utilizando int main, int argc, argv cadena.
El argc variable entera representa el número de argumentos pasados ​​a
la línea de comandos.
Y argv es un array, o piensan que es una lista de los argumentos pasados ​​pulg
>> Así que para César, ¿cómo validamos entrada del usuario?
Bueno, sólo deberían estar entrando dos argumentos de línea de comandos -
. / César y una clave.
Así que si argc no es 2, lo que significa que que o bien se olvidó la llave y sólo
introducido. / césar, o entrado varias claves.
>> Si este es el caso, entonces usted desee imprimir las instrucciones
y salir del programa.
Tendrán que volver a intentarlo desde la línea de comandos.
Pero incluso si argc es 2, se le que comprobar si
le dará una clave válida.
Para César, que necesita un entero.
Pero argv es un array de cadenas.
¿Cómo se accede a esa llave?
>> Un rápido vistazo a las matrices -
estructuras de datos que tienen múltiples valores del mismo tipo de datos.
Las entradas están indexados a cero, lo que significa que el primer elemento es el índice cero
y el último elemento está en el tamaño del índice menos 1, donde el tamaño es el número de
elementos de la matriz.
>> Si declaré un nuevo buzón matriz de cadenas de longitud 3, visualmente, que
se parece a esto.
Tres contenedores de cadenas , Al lado del otro.
Para acceder a cualquier elemento, escriba el nombre de la matriz y luego indicar
el índice entre corchetes.
Aquí, voy a asignar un valor a cada elemento, al igual que haría con cualquier
otra variable de cadena.
>> Así que para tener acceso a nuestros argumentos de la línea de comandos, todo lo que tenemos que hacer es acceder
el elemento de la derecha de la matriz argv.
Si el usuario ha introducido. / Equipo de despegue Rocket en el terminal, argv 0 sería
ser. / despegue.
argv habría equipo, y arg2 sería cohete.
>> Ahora que podemos acceder a la llave, todavía tenemos que hacer
asegurarse de que es correcta.
Tenemos que convertirlo en un entero.
Pero no podemos simplemente lanzar como que hemos hecho anteriormente.
Por suerte, la A a la función Y se encarga de esto para nosotros e incluso devuelve 0
si la cadena no se puede convertir en un número entero.
Todo depende de ti, sin embargo, a decir ¿por qué el usuario no lo harás
dejar que el programa continúe.
Almacenar el resultado de la A a la Y en un entero, y ahí lo tienes tu llave.
La siguiente parte es simple.
Preguntar al usuario en su texto, que será de tipo de datos de cadena.
Por suerte para nosotros, todo el usuario introduce cuerdas son válidas.
>> Ahora que tenemos todas las aportaciones necesarias desde el usuario, es el momento para nosotros para
cifrar su mensaje.
El concepto de Caesar es simple suficiente para entender.
Pero ¿cómo sabe el ordenador que cartas vienen uno tras otro?
>> Aquí es donde la tabla ASCII entra en juego
Cada personaje tiene un número entero número asociado con ella.
Capital es de 65.
Capital B es 66.
Minúsculas a es 97.
Minúsculas b es de 98.
Pero los personajes no se limitan a sólo números alfabéticos.
Por ejemplo, el símbolo @ es el número ASCII 64.
>> Antes de abordar toda la cadena, vamos a suponer que sólo tenemos que cambiar
un carácter.
Bueno, lo único que queremos desplazar real letras en el texto plano, no
caracteres o números.
Así que lo primero que vamos a querer cheque es si el personaje está en
el alfabeto.
>> El isalpha función hace por nosotros y devuelve un Boolean -
cierto si los personajes es una carta, false en caso contrario.
Otras dos funciones son útiles isupper y islower, con
nombres fáciles de entender.
Devuelven true si el carácter dado es mayúscula o minúscula,
respectivamente.
Puesto que son booleanos, son útil para utilizar como condiciones.
>> Si isalpha devuelve true, tendrá para cambiar el carácter con la tecla.
Así que vamos a abrir a ASCIIMath y hacer algunos cálculos ASCII.
El uso es muy similar a la de uso para César y toma en clave en el
línea de comandos.
>> Si me quedo ASCIIMath 5, parece añadir 5 a una, y me da la letra f, y
muestra el valor ASCII.
Así que vamos a echar un vistazo al programa.
>> Usted podría preguntarse, aquí, ¿por qué letra es un número entero, cuando es
claramente, también, una carta.
Resulta que los personajes y enteros son intercambiables.
Al poner la letra A en un solo entre comillas, el entero puede almacenar
el valor ASCII del capital A. Tenga cuidado, sin embargo.
Usted necesita las ropas sueltas.
Sin las comillas simples, la compilador buscaría una variable
Un llamado, y no el carácter.
>> Luego agrego carta y una clave, el almacenamiento de la resumir en el int variables de resultado.
Aunque resultado es de tipo de datos entero, mi sentencia printf usa el
% C marcador de posición para los caracteres.
Así el programa imprime el carácter asociado con el resultado de número entero.
Y ya que imprimimos el número entero formar y usar% d, vemos
el número así.
Así que ahora usted puede ver que hemos tratar a los personajes y
números enteros, y viceversa.
>> Vamos a probar a cabo ASCIIMath algunos más veces utilizando 25 como una clave.
Recibimos la letra z.
Ahora tratamos 26.
Queremos obtener la letra a, pero En su lugar tenemos una escuadra izquierda.
Así que, obviamente, sólo añadir la clave de la carta no es suficiente.
Tenemos que encontrar una fórmula para envolver todo el alfabeto, como nuestro
ejemplo en el principio hizo.
>> Una fórmula para el César cambio es el siguiente.
c es igual a P Plus k módulo 26.
Recuerde que es un modulo de utilidad operación que nos da el resto
de dividir un número por otro.
Vamos a aplicar esta fórmula a la llanura carta de texto con una clave de 2.
El valor ASCII de y es 89, lo que nos da 91 módulo 26,
que es igual a 13 -
definitivamente no es el valor ASCII de una, que es 67.
>> Humor mí ahora y alejarse de la Valores ASCII a un índice alfabético
donde A es cero y Z es 25, lo que significa que Y es 24.
24 más 2, módulo 6, nos da 26, módulo 26, 0, que es el
índice alfabético de a.
Así que esta fórmula parece aplicarse a la índice alfabético de la letra y
no su valor ASCII.
>> Pero usted comienza con valores ASCII.
Y para imprimir el carácter de texto cifrado, usted necesitará su valor ASCII también.
Todo depende de usted, entonces, averiguar cómo cambiar una y otra.
>> Una vez que averiguar la fórmula correcta para un carácter, todo lo que tiene que hacer
es aplicar la misma fórmula a todos los letra en el texto sin formato -
sólo si esa carta es alfabético, por supuesto.
Y recuerde que usted necesita para preservar el caso, superior o inferior, que es donde
las funciones isupper y islower mencionado anteriormente será muy útil.
Es posible que tenga dos fórmulas -
uno para las letras mayúsculas y uno para minúsculas.
Así isupper un esMenor le ayudará a determinar cuál es la fórmula a aplicar.
>> ¿Cómo se aplica la fórmula a cada carácter individual en una cadena?
Bueno, una cadena es sólo una matriz de caracteres.
Así que usted puede acceder a cada personaje por agrupando más de todos los personajes en el
cadena en un bucle for.
En cuanto a la condición de su bucle, el strlen función, por cadena
longitud, será muy útil.
Se necesita una cadena como entrada y devuelve la longitud de esa cadena.
Asegúrese de incluir la biblioteca de derecho utilizar la función de longitud de la cadena.
>> Y ahí tienes tu texto cifrado.
Mi nombre es el Zamyla.
Y [HABLAR CODE].