>> ZAMYLA CHAN: Gratulerer på målstreken din
første par C-programmer.
Jeg vet at ditt første steg inn C syntaks kan være skremmende.
Men jeg forsikrer deg, på slutten av Selvfølgelig vil du være i stand til å se på
første par oppdrag og fullføre dem i løpet av minutter.
>> Nå som du får mer kjent med syntaks, la oss komme til keiseren.
I Caesar, vil brukeren sende inn en heltall tast som en kommandolinje
argument, skriv deretter inn et vanlig tekstmelding ved ledeteksten.
Programmet vil da chiffrering teksten og skriv ut
deres krypterte teksten melding.
>> Den enciphering for Caesar er ganske enkel.
Sett hver bokstav, i deres ren tekst, av nøkkelen.
Som et resultat, er det også ganske usikker.
Men om gjennomføring av Caesar vil introdusere oss til ASCIIMath og rekke data
strukturer.
Vi får til mer komplekse chifre senere.
Med en Caesar nøkkel 2, bokstaven A i ren tekst vil være representert ved
bokstaven C i krypterte teksten fordi C er to bokstaver etter A. B ville være
representert ved D og C etter E. Mot slutten av alfabetet, er W
representert ved Y, og X av Z. Men Y ikke har to bokstaver etter den, slik at
de koder brytes rundt alfabetet.
Y i ren tekst er dermed representert ved En i chifferteksten, og Z ved B. Det kan
bidra til å vise Caesar Cypher som en kontinuerlig alfabetet hjulet.
>> Å chiffrering sin tekst, brukeren vil gå to argumenter
inn i kommandolinjen -
. / Cæsar etterfulgt av en nøkkel.
Som alltid, kan vi ikke stole på brukeren helt å gå inn innspill som gjør
sans for vårt program.
Så vi må validere sine kommandolinjen innspill.
>> I stedet for å bruke int main ugyldig, vi bruker int main, int argc, string argv.
Den heltallsvariabel argc representerer antall argumenter som sendes inn i
kommandolinjen.
Og argv er en matrise, eller tenke på det som en liste, av argumentene gått i.
>> Så for Caesar, hvordan vi validere brukerens innspill?
Vel, de skal bare være inn to kommandolinje argumenter -
. / Cæsar og en nøkkel.
Så hvis argc er ikke to, som betyr at de enten har glemt en nøkkel og bare
inn. / cæsar, eller de inngått flere nøkler.
>> Hvis dette er tilfelle, så vil du vil skrive ut instruksjoner
og avslutte programmet.
De må prøve igjen fra kommandolinjen.
Men selv om argc er to, vil du må sjekke om de
gi deg en gyldig nøkkel.
For Caesar, trenger du et heltall.
Men argv er en rekke strenger.
Hvordan får du det nøkkelen?
>> En rask titt på arrays -
datastrukturer som holder flere verdier av samme datatype.
Oppføringer er null-indeksert, noe som betyr at Det første elementet er indeksen null
og det siste elementet er ved indeksstørrelse en minus, hvor størrelsen er antallet
elementer i matrisen.
>> Hvis jeg erklært en ny streng rekke postkasse av lengde 3, visuelt, det
ser slik ut.
Tre beholdere for strings , Side ved side.
For å få tilgang til alle element, skriver du inn navnet i matrisen og deretter angi
indeksen i klammer.
Her, jeg tilordne en verdi til hver element, akkurat som jeg ville gjort med en hvilken som helst
annen streng variabel.
>> Så for å få tilgang til våre kommandolinje argumenter, alt vi trenger å gjøre er å få tilgang
den høyre del av argv matrisen.
Hvis brukeren har angitt. / Blastoff teamet Rocket inn i terminalen, argv 0 ville
være. / blastoff.
argv ville være Team, og arg2 ville være rakett.
>> Nå som vi kan få tilgang til vår nøkkel, vi trenger fortsatt å gjøre
sikker på at det er riktig.
Vi trenger å konvertere den til et heltall.
Men vi kan ikke bare kaste ut vi har gjort tidligere.
Heldigvis tar A til Y funksjon omsorg av dette for oss, og selv returnerer 0
Dersom strengen ikke kan konverteres inn i et heltall.
Det er opp til deg, men å fortelle brukeren hvorfor du ikke vil
la programmet fortsette.
Lagre resultatet av A til Y i en heltall, og der har du nøkkelen.
Den neste delen er enkel.
Spør brukeren om deres ren tekst, Dette vil være av datatypen streng.
Heldigvis for oss, lagt inn alle bruker strenger er gyldige.
>> Nå som vi har alle nødvendige innspill fra brukeren, er det på tide for oss å
chiffrering sitt budskap.
Begrepet Caesar er enkel nok til å forstå.
Men hvordan vet datamaskinen som Brevene kommer etter hverandre?
>> Her er der ASCII-tabellen kommer i.
Hver figur har et heltall rekke forbundet med det.
Capital A er 65 år.
Capital B er 66.
Små bokstaver en er 97.
Små bokstaver b er 98.
Men tegn som ikke er begrenset til bare alfabetiske tall.
For eksempel, @-symbolet er ASCII nummer 64.
>> Før håndtere hele strengen, la oss late som vi bare nødt til å skifte
ett tegn.
Vel, vi bare ønsker å skifte selve bokstaver i ren tekst, ikke
tegn eller tall.
Så det første som vi ønsker å sjekke er om karakteren er i
alfabetet.
>> Funksjonen isalpha gjør dette for oss og returnerer en boolsk -
sant hvis tegnene er et brev, usann hvis ellers.
To andre nyttige funksjoner er isupper og islower, med
selvforklarende navn.
De return true hvis den gitte karakter er store eller små,
henholdsvis.
Siden de er boolske, de er nyttig å bruke ettersom forholdene.
>> Hvis isalpha returnerer true, må du å skifte det tegnet av nøkkelen.
Så la oss åpne til ASCIIMath og gjøre noen ASCII matematikk.
Bruken er svært lik bruken for Caesar og tar i en nøkkel på
kommandolinjen.
>> Hvis jeg kjører ASCIIMath 5, synes det å legge Fem til en, noe som gir me bokstaven F, og
viser ASCII verdi.
Så la oss ta en titt på programmet.
>> Du lurer kanskje på, akkurat her, hvorfor Brevet er et heltall, når det er
tydelig, vel, et brev.
Det viser seg at tegn og heltall er utskiftbare.
Ved å sette bokstaven A i single anførselstegn, kan heltall lagre
ASCII verdien av kapital A. Vær forsiktig, skjønt.
Du trenger de enkle klær.
Uten de enkle anførselstegn, den kompilatoren ville se etter en variabel
kalt A, og ikke tegnet.
>> Da jeg legge brev og en nøkkel, lagring av sum i int variabler resultat.
Selv om resultatet er av datatype heltall, bruker min printf uttalelse
% C plassholder for tegn.
Slik at programmet skriver ut tegnet forbundet med den heltall resultat.
Og siden vi trykket heltall form også ved hjelp% d, ser vi
antall i tillegg.
Så nå kan du se at vi behandle tegn og
heltall, og vice versa.
>> La oss teste ut ASCIIMath noen flere ganger med 25 som en nøkkel.
Vi får bokstaven z.
Nå prøver vi 26.
Vi ønsker å få bokstaven a, men i stedet får vi en venstre brakett.
Så åpenbart, bare legge den Nøkkelen til brevet ikke vil gjøre.
Vi trenger å finne ut en formel til å vikle rundt alfabetet, som vår
eksempel i begynnelsen gjorde.
>> En formel for Cæsars skift er som følger.
c er lik p pluss k modulo 26.
Husk at modulo er et nyttig operasjon som gir oss den resterende
å dele en rekke av den andre.
La oss bruke denne formelen til sletten Teksten brev med en nøkkel av to.
ASCII verdien av y er 89, noe som gir oss 91 modulo 26,
som tilsvarer 13 -
definitivt ikke ASCII-verdien av en, er der 67.
>> Humor meg nå og bevege seg bort fra ASCII-verdier til en alfabetisk indeks
hvor A er null og Z er 25, noe som betyr at Y er 24.
24 2 pluss, 6 modulo, gir oss 26, 26 modulo, 0, som er
alfabetisk indeks over en.
Så denne formelen ser ut til å gjelde for alfabetisk indeks over brevet og
ikke sin ASCII verdi.
>> Men du starter med ASCII-verdier.
Og for å skrive ut den krypterte teksten karakter, du trenger sin ASCII verdi også.
Det er opp til deg, da, for å finne ut hvordan å bytte frem og tilbake.
>> Når du finne ut den rette formelen for ett tegn, alt du trenger å gjøre
er å bruke den samme formelen til hver brev i ren tekst -
bare hvis det brevet er alfabetisk, selvfølgelig.
Og husk at du trenger å bevare tilfelle, øvre eller nedre, det er der
den isUpper og isLower funksjoner nevnt tidligere vil komme godt med.
Du har kanskje to formler -
en for store bokstaver og en for små bokstaver.
Så isUpper en isLower vil hjelpe deg bestemme hvilken formel til å søke.
>> Hvordan søker du formelen til hver enkelt tegn i en streng?
Vel, er en streng bare en rekke tegn.
Slik at du kan få tilgang til hver karakter ved gruppering over hver karakter i
string i en for loop.
Som for tilstanden din for loop, funksjonen strlen, for streng
lengde, vil komme godt med.
Det tar i en streng som input og gir lengden av strengen.
Sørg for å ta med riktig bibliotek å bruke den strenglengde funksjon.
>> Og der har du din krypterte teksten.
Mitt navn er Zamyla.
Og [SNAKKE CODE].