>> ZAMYLA CHAN: Tillykke om efterbehandling dit
første par af C-programmer.
Jeg ved, at din første strejftog ind C syntaks kan være skræmmende.
Men jeg kan forsikre dig, ved afslutningen af ​​den Selvfølgelig, vil du være i stand til at se på
første par opgaver, og fuldføre dem på få minutter.
>> Nu, at du får mere fortrolig med syntaks, lad os komme til Cæsar.
I Caesar, vil brugeren indgive en heltal nøgle som en kommandolinje
argument, og indtast derefter en almindelig tekstbesked ved prompten.
Programmet vil derefter kryptografere teksten og udskrive
deres kryptograferede tekstmeddelelse.
>> Den krypteringsudstyr for Caesar er ganske enkel.
Skift hvert bogstav i deres almindelig tekst, ved nøgle.
Som et resultat, er det også temmelig usikker.
Men gennemførelse Caesar vil indføre os til ASCIIMath og matrix data
strukturer.
Vi vil komme til mere komplekse ciphers senere.
Med en Cæsar nøgle 2, bogstavet A i almindelig tekst vil blive repræsenteret af
bogstavet C i ciphertext fordi C er to bogstaver efter A. B ville være
repræsenteret ved D og C af E. Mod slutningen af ​​alfabetet, W er
repræsenteret ved Y og X ved Z. Men Y ikke har to bogstaver efter det, så
de ciphers ombrydes omkring alfabetet.
Y i klartekst er således repræsenteret ved A i ciphertext, og Z ved B. Det kan
hjælpe med at se Cæsar Cypher lide en kontinuerlig alfabet hjul.
>> At kryptografere deres tekst, brugeren træder to argumenter
i kommandolinjen -
. / Caesar efterfulgt af en nøgle.
Som altid kan vi ikke stole på brugeren helt at indtaste input, der gør
mening for vores program.
Så vi bliver nødt til at validere deres kommandolinje-indgang.
>> I stedet for at bruge int main tomrum, er vi hjælp int main, int argc, string argv.
Den heltalsvariabel argc repræsenterer antallet af argumenter passeret ind
kommandolinjen.
Og argv er et array, eller tænke på det som en liste af de argumenter gik i.
>> Så for Cæsar, hvordan vi validerer brugerens indlæsning?
Nå, skal de kun være på vej ind to kommandolinjeargumenter -
. / Cæsar og en nøgle.
Så hvis argc ikke er 2, det betyder, at de enten glemt en nøgle og bare
indtastet. / caesar, eller de indtastet flere nøgler.
>> Hvis dette er tilfældet, så vil du ønsker at udskrive vejledningen
og afslutte programmet.
De bliver nødt til at prøve igen fra kommandolinjen.
Men selv hvis argc er 2, vil du brug for at kontrollere, om de
giver dig en gyldig nøgle.
For Cæsar, du har brug et heltal.
Men argv er en vifte af strenge.
Hvordan får du adgang denne nøgle?
>> Et hurtigt kig på arrays -
datastrukturer, der holder flere værdier af samme datatype.
Posterne nul-indekseret, hvilket betyder, at det første element er indekset nul
og det sidste element er på indeks størrelse minus 1, hvor størrelse er antallet af
elementer i array.
>> Hvis jeg erklæret en ny streng vifte postkasse af længde 3, visuelt, det
ligner dette.
Tre containere for strygere , Side om side.
For at få adgang ethvert element, du skriver navnet af array'et og derefter angive
indekset i firkantede parenteser.
Her, jeg tildele en værdi til hver element, ligesom jeg ville gøre med ethvert
anden streng variabel.
>> Så for at få adgang til vores kommandolinjeargumenter, alt, hvad vi skal gøre er at få adgang til
den højre del af argv array.
Hvis brugeren har indtastet. / Blastoff Team Rocket ind i terminalen, argv 0 Ville
være. / blastoff.
argv ville være Team, og arg2 ville være raket.
>> Nu, hvor vi kan få adgang til vores nøgle, vi stadig nødt til at gøre
sikker på, at den er korrekt.
Vi er nødt til at omdanne det til et heltal.
Men vi kan ikke bare kaste ligesom vi har gjort tidligere.
Heldigvis A til Y-funktion tager sig af dette for os og endda returnerer 0
hvis strengen ikke kan konverteres i et heltal.
Det er op til dig, selv om, at fortælle brugeren, hvorfor du ikke vil
lade programmet fortsætte.
Gemme resultatet af A til Y i en tal, og der har du din nøgle.
Den næste del er enkel.
Bede brugeren om deres almindelig tekst, der vil være af datatypen strengen.
Heldigvis for os indtastet al bruger strenge er gyldige.
>> Nu da vi har alle nødvendige input fra brugeren, er det tid for os at
kryptografere deres budskab.
Begrebet Cæsar er simpelt nok at forstå.
Men hvordan din computer vide, hvilke breve kommer efter hinanden?
>> Her er hvor ASCII tabellen kommer ind
Hver karakter har et heltal række forbundet med det.
Capital A er 65 år.
Capital B er 66.
Små bogstaver a er 97.
Lowercase b er 98.
Men tegn er ikke begrænset til kun alfabetiske numre.
For eksempel symbolet @ er ASCII tal 64..
>> Før der beskæftiger sig med hele strengen, Lad os lade som om vi bare nødt til at flytte
et tegn.
Nå, vi kun ønsker at flytte den faktiske bogstaver i almindelig tekst, ikke
tegn eller tal.
Så den første ting, vi har lyst til at tjekke, om den karakter er i
alfabetet.
>> Funktionen isalpha gør dette for os og returnerer en boolesk -
tilfældet, hvis tegnene er et brev, falsk, hvis andet.
To andre nyttige funktioner er isupper og islower, med
selvforklarende navne.
De vender tilbage sandt, hvis den givne karakter er store eller små bogstaver,
henholdsvis.
Da de er Booleans, de er nyttigt at bruge som betingelser.
>> Hvis isalpha returnerer true, skal du at flytte denne karakter af nøglen.
Så lad os åbne for ASCIIMath og gøre nogle ASCII matematik.
Brugen er meget lig brugen for Cæsar og tager i en nøgle i
kommandolinjen.
>> Hvis jeg kører ASCIIMath 5, ser det ud til at tilføje 5 til en, giver mig brevet f, og
vise ASCII værdien.
Så lad os tage et kig på programmet.
>> Du vil måske undre, lige her, hvorfor brev er et heltal, når det er
klart, ja, et brev.
Det viser sig, at figurer og heltal er indbyrdes udskiftelige.
Ved at sætte bogstavet A i single anførselstegn, kan heltal gemme
ASCII værdien af ​​kapital A. Vær forsigtig, selv om.
Du har brug for de enkelte tøj.
Uden de enkelte anførselstegn, det compiler ville kigge efter en variabel
kaldes A, og ikke tegnet.
>> Så jeg tilføje brev og en nøgle, lagring af sum i int variabler resultatet.
Selvom resultatet er af datatype heltal, min printf erklæring anvender
% C pladsholder for tegn.
Så udskriver programmet tegnet forbundet med heltal resultat.
Og da vi udskrevet heltal form såvel bruger% d, ser vi
antallet samt.
Så nu kan du se, at vi behandle tegn, og
heltal, og vice versa.
>> Lad os afprøve ASCIIMath et par flere gange ved hjælp 25 som en nøgle.
Vi får brevet z.
Nu prøver vi 26.
Vi ønsker at få bogstavet a, men i stedet får vi en venstre parentes.
Så selvfølgelig, bare tilføje nøgle til brevet ikke vil gøre.
Vi er nødt til at finde ud af en formel til at ombryde omkring alfabetet, lide vores
eksempel i begyndelsen gjorde.
>> En formel for Cæsars skift er som følger.
c lig p plus k. modulo 26..
Husk, at modulo er et nyttigt operation, der giver os resten
at dividere et nummer af den anden.
Lad os anvende denne formel til sletten text brev med en nøgle på 2.
ASCII værdi af y er 89, som giver os 91 modulo 26,
der er lig med 13 -
absolut ikke ASCII værdien et, hvilket er 67..
>> Humor mig nu og bevæge sig væk fra ASCII-værdier til et alfabetisk indeks
hvor A er nul, og Z er 25, hvilket betyder, at Y er 24..
24 plus 2, modulo 6, giver os 26, modulo 26, 0, som er den
alfabetisk indeks af.
Så denne formel synes at gælde for alfabetisk indeks over brevet og
ikke dens ASCII værdi.
>> Men du starter med ASCII-værdier.
Og for at udskrive ciphertext karakter du får brug for sin ASCII værdi samt.
Det er op til dig, så at finde ud af hvordan du skifter frem og tilbage.
>> Når du regne ud den rigtige formel for ét tegn, skal alt du skal gøre
er anvende den samme formel til hver bogstav i klartekst -
hvis dette brev er alfabetisk, selvfølgelig.
Og husk, at du har brug for at bevare tilfældet, øvre eller nedre, det er hvor
Den isUpper og isLower funktioner tidligere nævnt vil komme i handy.
Du har måske to formler -
én for store bogstaver og en for små.
Så isUpper en isLower vil hjælpe dig afgøre, hvilken formel skal anvendes.
>> Hvordan du anvender din formel til hver enkelt tegn i en streng!
Tja, en streng er blot en vifte af tegn.
Så du kan få adgang til hver karakter ved at gruppering over hver tegn i
streng i en for-løkke.
Hvad tilstanden af ​​din for-løkke, funktionen strlen for streng
længde, vil komme i handy.
Det tager i en streng som input og giver længden af ​​denne streng.
Sørg for at medtage det rigtige bibliotek at bruge strengen længde funktionen.
>> Og der har du din ciphertext.
Mit navn er Zamyla.
Og [SPEAKING CODE].