>> ZAMYLA CHAN: Felicitacions Ha acabat el
primer parell de programes en C.
Sé que la seva primera incursió en Sintaxi de C pot ser descoratjador.
Però t'asseguro que, al final de l' Per descomptat, vostè serà capaç de mirar la
primer parell de tasques i de completar en qüestió de minuts.
>> Ara que vostè està aconseguint més familiar amb la sintaxi, anem a arribar a César.
En Caesar, l'usuari ha de presentar una clau de sencer com una línia d'ordres
argument, a continuació, introduïu un pla missatge de text a l'indicador.
El programa llavors xifrar el text i imprimir
el seu missatge de text xifrat.
>> La xifra del Cèsar és bastant simple.
Canvieu cada lletra, si text sense format, per la tecla.
Com a resultat d'això, és també bastant insegur.
Però la implementació de Caesar introduirà ens dades ASCIIMath i la matriu
estructures.
Anem a arribar al més complex sistemes de xifrat més tard.
Amb una clau de Caesar 2, la lletra A text sense format estaria representada per
la lletra C en el text xifrat per C és de dues lletres després d'A B serien
representada per D i C d'E Cap el final de l'alfabet, W és
representat per I, i X per Z. Però I no té dues cartes després que, per la
les xifres s'embolica al voltant de l'alfabet.
I en text pla es representa així A en text xifrat i Z per B. Pot
ajudarà a veure el Caesar Cypher com una roda alfabet contínua.
>> Per xifrar el text, l'usuari entraran dos arguments
en la línia d'ordres -
. / César seguit d'una tecla.
Com sempre, no podem confiar en l'usuari completament per entrar d'entrada que fan
sentit per al nostre programa.
Així que anem a haver de validar la seva entrada de línia d'ordres.
>> En lloc d'utilitzar void main int, estem utilitzant int main, argc int, string argv.
El argc variable sencera representa el nombre d'arguments passats a
la línia d'ordres.
I argv és una matriu, o pensar en ella com una llista dels arguments passats polz
>> Així que per a César, com validem l'entrada de l'usuari?
Bé, només haurien d'estar entrant dos arguments de línia d'ordres -
. / Caesar i una clau.
Així que si argc no és 2, el que significa que o bé es va oblidar la clau i només
introduït. / Cèsar, o entrat en diverses claus.
>> Si aquest és el cas, llavors vostè voleu imprimir les instruccions
i sortir del programa.
Hauran de tornar a intentar des de la línia d'ordres.
Però fins i tot si argc és 2, se li de comprovar si
li donarà una clau vàlida.
Per César, que necessita un enter.
Però argv és una matriu de cadenes.
Com es pot accedir a aquesta clau?
>> Un ràpid cop d'ull a les matrius -
estructures de dades que tenen múltiples valors del mateix tipus de dades.
Les entrades estan indexats a zero, el que significa que el primer element és l'índex zero
i l'últim element està en la grandària de l'índex menys 1, on la mida és el nombre de
elements de la matriu.
>> Si declarar una nova bústia matriu de cadenes de longitud 3, visualment, es
són aquestes.
Tres contenidors de cadenes , Al costat de l'altre.
Per accedir a qualsevol element, escriviu el nom de la matriu i després indicar
l'índex entre claudàtors.
Aquí, estic assignant un valor a cada element, tal com ho faria amb qualsevol
una altra variable de cadena.
>> Així que per accedir als nostres arguments de línia d'ordres, tot el que hem de fer és accedir a
l'element de la dreta de la matriu argv.
Si l'usuari introdueix Team. / Enlairament Rocket al terminal, argv 0 faria
ser. / enlairament.
argv seria Team, i arg2 seria coet.
>> Ara que podem accedir a la clau, encara hem de fer
assegurar-se que és correcta.
Hem de convertir-lo en un enter.
Però no podem emetre com que hem fet anteriorment.
Per sort, el de funció IA s'encarrega d'això per a nosaltres i fins i tot retorna 0
si la cadena no es pot convertir en un nombre sencer.
Tot depèn de tu, però, a dir l'usuari per la qual no
deixar que el programa continuï.
Deseu el resultat de l'A a la I en un sencer, i no tens la clau.
La següent part és simple.
Preguntar a l'usuari per el seu text, que serà de cadena de tipus de dades.
Per sort per a nosaltres, tot l'usuari introdueix cordes són vàlides.
>> Ara que tenim totes les aportacions necessàries per part de l'usuari, és el moment per a nosaltres
xifrar el missatge.
El concepte de Caesar és simple suficient per entendre.
Però, com sap l'ordinador que cartes vénen un darrere l'altre?
>> Aquí és on la taula ASCII entra en joc
Cada caràcter té un nombre enter número associat a ella.
Capital és de 65.
Capital de B és de 66.
Minúscula és 97.
Minúscules b és de 98.
No obstant això, els caràcters no es limiten que només números alfabètics.
Per exemple, el símbol @ és el nombre ASCII 64.
>> Abans d'abordar tota la cadena, anem a suposar que només hem de canviar
un caràcter.
Bé, l'únic que volem desplaçar real lletres en el text, no
caràcters o números.
Així que el primer que voldrem comprovar és si el personatge està en
l'alfabet.
>> El isalpha funció ho fa per nosaltres i retorna un Boolean -
cert si els personatges és una carta, false en cas contrari.
Dues funcions són útils isupper i islower, amb
noms autoexplicatius.
Tornen true si el caràcter donat és majúscula o minúscula,
respectivament.
Com que són booleans, són útil per utilitzar com a condicions.
>> Si isalpha torna true, haurà per canviar el caràcter amb la tecla.
Així que anem a obrir a ASCIIMath i fer alguns càlculs ASCII.
L'ús és molt similar a l'ús per Cèsar i presa en clau al
línia d'ordres.
>> Si em quedo ASCIIMath 5, sembla afegir 5 a 1, i em va donar la lletra f, i
mostra el valor ASCII.
Així que donem una ullada al programa.
>> Vostè podria preguntar-se, aquí, per què lletra és un nombre enter, quan és
clarament, també, una carta.
Resulta que els personatges i sencers són intercanviables.
En posar la lletra A en un sol entre cometes, tot l'poden emmagatzemar
el valor ASCII del capital A. Aneu amb compte, però.
Vostè necessita la roba individuals.
Sense les cometes simples, el compilador buscaria una variable
Una crida, i no el caràcter.
>> Després afegeixo carta i una clau, l'emmagatzematge de la suma al resultat les variables int.
Tot i que és resultat de tipus de dades sencer, la meua sentència printf s'usa el
% C marcador de posició per als personatges.
Així el programa imprimeix el caràcter associada amb el resultat de nombre enter.
I ja que imprimim el nombre enter forma i amb% d, veiem
el nombre així.
Així que ara vostè pot veure que tractament de personatges i
sencers, i viceversa.
>> Anem a prova a terme ASCIIMath alguns més vegades usant 25 com una clau.
Vam rebre la lletra z.
Ara tractem 26.
Volem que la lletra a, però en canvi tenim un claudàtor esquerre.
Així que, òbviament, simplement afegint el clau de la carta no és suficient.
Hem de trobar una fórmula per embolicar tot l'alfabet, com el nostre
exemple en el principi va fer.
>> Una fórmula pel César canvi és el següent.
c és igual a p més k mòdul 26.
Recordeu que és un mòdul útil operació que ens dóna la resta
de dividir un nombre per l'altre.
Anem a aplicar aquesta fórmula a la plana Carta de text amb una clau de 2.
El valor ASCII d'i és 89, el que ens dóna 91 mòdul 26,
el que equival a 13 -
definitivament no és el valor ASCII d'una, que és 67.
>> Em Humor ara i allunyar-se de la Valors ASCII a un índex alfabètic
on A és zero i Z és 25, el que significa que I és 24.
24 més 2, mòdul 6, ens dóna 26, mòdul 26, 0, que és el
índex alfabètic de a.
Així que aquesta fórmula sembla aplicar a la índex alfabètic de la lletra i
no el seu valor ASCII.
>> Però vostè comença amb valors ASCII.
I per imprimir el caràcter de text xifrat, té el valor ASCII també.
Tot depèn de tu, doncs, d'esbrinar com canviar d'un costat a un altre.
>> Un cop d'esbrinar la fórmula correcta per a un caràcter, tot el que ha de fer
és aplicar la mateixa fórmula a tots els lletra en el text sense format -
només si aquesta carta és alfabètic, és clar.
I recordi que vostè necessita per preservar el cas, superior o inferior, que és on
les funcions islower isupper i esmentat anteriorment serà molt útil.
És possible que tingui dues fórmules -
un per a les lletres majúscules i un per minúscules.
Així isupper 1 esMenor l'ajudarà a determinar quina fórmula aplicar.
>> Com s'aplica la fórmula a cada sol caràcter en una cadena?
Bé, una cadena és només una matriu de caràcters.
Així que vostè pot accedir a cada personatge agrupa més de tots els personatges de la
cadena en un bucle.
Pel que fa a la condició del seu bucle for, la funció strlen, per cadena
longitud, serà molt útil.
Es necessita una cadena com a entrada i torna la llargada d'aquesta cadena.
Assegureu-vos d'incloure la biblioteca de dret per utilitzar la funció de longitud de la cadena.
>> I aquí tens el teu text xifrat.
El meu nom és el Zamyla.
I [CODI DE PARLAR].