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].