1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Gratulerer på målstreken din 3 00:00:11,270 --> 00:00:13,200 første par C-programmer. 4 00:00:13,200 --> 00:00:16,379 Jeg vet at ditt første steg inn C syntaks kan være skremmende. 5 00:00:16,379 --> 00:00:20,060 Men jeg forsikrer deg, på slutten av Selvfølgelig vil du være i stand til å se på 6 00:00:20,060 --> 00:00:23,870 første par oppdrag og fullføre dem i løpet av minutter. 7 00:00:23,870 --> 00:00:27,830 >> Nå som du får mer kjent med syntaks, la oss komme til keiseren. 8 00:00:27,830 --> 00:00:31,720 I Caesar, vil brukeren sende inn en heltall tast som en kommandolinje 9 00:00:31,720 --> 00:00:35,300 argument, skriv deretter inn et vanlig tekstmelding ved ledeteksten. 10 00:00:35,300 --> 00:00:38,050 Programmet vil da chiffrering teksten og skriv ut 11 00:00:38,050 --> 00:00:40,020 deres krypterte teksten melding. 12 00:00:40,020 --> 00:00:42,980 >> Den enciphering for Caesar er ganske enkel. 13 00:00:42,980 --> 00:00:46,455 Sett hver bokstav, i deres ren tekst, av nøkkelen. 14 00:00:46,455 --> 00:00:49,220 Som et resultat, er det også ganske usikker. 15 00:00:49,220 --> 00:00:53,850 Men om gjennomføring av Caesar vil introdusere oss til ASCIIMath og rekke data 16 00:00:53,850 --> 00:00:54,460 strukturer. 17 00:00:54,460 --> 00:00:57,510 Vi får til mer komplekse chifre senere. 18 00:00:57,510 --> 00:01:01,680 Med en Caesar nøkkel 2, bokstaven A i ren tekst vil være representert ved 19 00:01:01,680 --> 00:01:07,580 bokstaven C i krypterte teksten fordi C er to bokstaver etter A. B ville være 20 00:01:07,580 --> 00:01:12,450 representert ved D og C etter E. Mot slutten av alfabetet, er W 21 00:01:12,450 --> 00:01:18,550 representert ved Y, og X av Z. Men Y ikke har to bokstaver etter den, slik at 22 00:01:18,550 --> 00:01:21,070 de koder brytes rundt alfabetet. 23 00:01:21,070 --> 00:01:27,190 Y i ren tekst er dermed representert ved En i chifferteksten, og Z ved B. Det kan 24 00:01:27,190 --> 00:01:32,080 bidra til å vise Caesar Cypher som en kontinuerlig alfabetet hjulet. 25 00:01:32,080 --> 00:01:35,760 >> Å chiffrering sin tekst, brukeren vil gå to argumenter 26 00:01:35,760 --> 00:01:37,090 inn i kommandolinjen - 27 00:01:37,090 --> 00:01:40,010 . / Cæsar etterfulgt av en nøkkel. 28 00:01:40,010 --> 00:01:44,710 Som alltid, kan vi ikke stole på brukeren helt å gå inn innspill som gjør 29 00:01:44,710 --> 00:01:45,800 sans for vårt program. 30 00:01:45,800 --> 00:01:50,670 Så vi må validere sine kommandolinjen innspill. 31 00:01:50,670 --> 00:01:57,285 >> I stedet for å bruke int main ugyldig, vi bruker int main, int argc, string argv. 32 00:01:57,285 --> 00:02:01,730 Den heltallsvariabel argc representerer antall argumenter som sendes inn i 33 00:02:01,730 --> 00:02:02,880 kommandolinjen. 34 00:02:02,880 --> 00:02:09,070 Og argv er en matrise, eller tenke på det som en liste, av argumentene gått i. 35 00:02:09,070 --> 00:02:12,000 >> Så for Caesar, hvordan vi validere brukerens innspill? 36 00:02:12,000 --> 00:02:15,870 Vel, de skal bare være inn to kommandolinje argumenter - 37 00:02:15,870 --> 00:02:18,150 . / Cæsar og en nøkkel. 38 00:02:18,150 --> 00:02:22,340 Så hvis argc er ikke to, som betyr at de enten har glemt en nøkkel og bare 39 00:02:22,340 --> 00:02:27,230 inn. / cæsar, eller de inngått flere nøkler. 40 00:02:27,230 --> 00:02:29,770 >> Hvis dette er tilfelle, så vil du vil skrive ut instruksjoner 41 00:02:29,770 --> 00:02:30,910 og avslutte programmet. 42 00:02:30,910 --> 00:02:34,320 De må prøve igjen fra kommandolinjen. 43 00:02:34,320 --> 00:02:37,430 Men selv om argc er to, vil du må sjekke om de 44 00:02:37,430 --> 00:02:39,100 gi deg en gyldig nøkkel. 45 00:02:39,100 --> 00:02:40,730 For Caesar, trenger du et heltall. 46 00:02:40,730 --> 00:02:43,260 Men argv er en rekke strenger. 47 00:02:43,260 --> 00:02:46,490 Hvordan får du det nøkkelen? 48 00:02:46,490 --> 00:02:47,850 >> En rask titt på arrays - 49 00:02:47,850 --> 00:02:51,410 datastrukturer som holder flere verdier av samme datatype. 50 00:02:51,410 --> 00:02:55,350 Oppføringer er null-indeksert, noe som betyr at Det første elementet er indeksen null 51 00:02:55,350 --> 00:03:00,260 og det siste elementet er ved indeksstørrelse en minus, hvor størrelsen er antallet 52 00:03:00,260 --> 00:03:02,850 elementer i matrisen. 53 00:03:02,850 --> 00:03:07,380 >> Hvis jeg erklært en ny streng rekke postkasse av lengde 3, visuelt, det 54 00:03:07,380 --> 00:03:08,570 ser slik ut. 55 00:03:08,570 --> 00:03:11,520 Tre beholdere for strings , Side ved side. 56 00:03:11,520 --> 00:03:15,445 For å få tilgang til alle element, skriver du inn navnet i matrisen og deretter angi 57 00:03:15,445 --> 00:03:18,080 indeksen i klammer. 58 00:03:18,080 --> 00:03:21,610 Her, jeg tilordne en verdi til hver element, akkurat som jeg ville gjort med en hvilken som helst 59 00:03:21,610 --> 00:03:24,310 annen streng variabel. 60 00:03:24,310 --> 00:03:29,020 >> Så for å få tilgang til våre kommandolinje argumenter, alt vi trenger å gjøre er å få tilgang 61 00:03:29,020 --> 00:03:31,690 den høyre del av argv matrisen. 62 00:03:31,690 --> 00:03:37,360 Hvis brukeren har angitt. / Blastoff teamet Rocket inn i terminalen, argv 0 ville 63 00:03:37,360 --> 00:03:38,950 være. / blastoff. 64 00:03:38,950 --> 00:03:45,010 argv ville være Team, og arg2 ville være rakett. 65 00:03:45,010 --> 00:03:47,670 >> Nå som vi kan få tilgang til vår nøkkel, vi trenger fortsatt å gjøre 66 00:03:47,670 --> 00:03:49,040 sikker på at det er riktig. 67 00:03:49,040 --> 00:03:51,060 Vi trenger å konvertere den til et heltall. 68 00:03:51,060 --> 00:03:54,680 Men vi kan ikke bare kaste ut vi har gjort tidligere. 69 00:03:54,680 --> 00:03:58,800 Heldigvis tar A til Y funksjon omsorg av dette for oss, og selv returnerer 0 70 00:03:58,800 --> 00:04:02,110 Dersom strengen ikke kan konverteres inn i et heltall. 71 00:04:02,110 --> 00:04:04,450 Det er opp til deg, men å fortelle brukeren hvorfor du ikke vil 72 00:04:04,450 --> 00:04:06,220 la programmet fortsette. 73 00:04:06,220 --> 00:04:10,710 Lagre resultatet av A til Y i en heltall, og der har du nøkkelen. 74 00:04:10,710 --> 00:04:12,070 Den neste delen er enkel. 75 00:04:12,070 --> 00:04:15,940 Spør brukeren om deres ren tekst, Dette vil være av datatypen streng. 76 00:04:15,940 --> 00:04:18,339 Heldigvis for oss, lagt inn alle bruker strenger er gyldige. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nå som vi har alle nødvendige innspill fra brukeren, er det på tide for oss å 79 00:04:24,760 --> 00:04:26,520 chiffrering sitt budskap. 80 00:04:26,520 --> 00:04:29,200 Begrepet Caesar er enkel nok til å forstå. 81 00:04:29,200 --> 00:04:33,750 Men hvordan vet datamaskinen som Brevene kommer etter hverandre? 82 00:04:33,750 --> 00:04:36,100 >> Her er der ASCII-tabellen kommer i. 83 00:04:36,100 --> 00:04:39,420 Hver figur har et heltall rekke forbundet med det. 84 00:04:39,420 --> 00:04:41,380 Capital A er 65 år. 85 00:04:41,380 --> 00:04:43,310 Capital B er 66. 86 00:04:43,310 --> 00:04:45,260 Små bokstaver en er 97. 87 00:04:45,260 --> 00:04:47,590 Små bokstaver b er 98. 88 00:04:47,590 --> 00:04:50,770 Men tegn som ikke er begrenset til bare alfabetiske tall. 89 00:04:50,770 --> 00:04:56,020 For eksempel, @-symbolet er ASCII nummer 64. 90 00:04:56,020 --> 00:04:59,690 >> Før håndtere hele strengen, la oss late som vi bare nødt til å skifte 91 00:04:59,690 --> 00:05:01,220 ett tegn. 92 00:05:01,220 --> 00:05:04,640 Vel, vi bare ønsker å skifte selve bokstaver i ren tekst, ikke 93 00:05:04,640 --> 00:05:06,020 tegn eller tall. 94 00:05:06,020 --> 00:05:09,100 Så det første som vi ønsker å sjekke er om karakteren er i 95 00:05:09,100 --> 00:05:10,430 alfabetet. 96 00:05:10,430 --> 00:05:14,460 >> Funksjonen isalpha gjør dette for oss og returnerer en boolsk - 97 00:05:14,460 --> 00:05:18,570 sant hvis tegnene er et brev, usann hvis ellers. 98 00:05:18,570 --> 00:05:22,270 To andre nyttige funksjoner er isupper og islower, med 99 00:05:22,270 --> 00:05:23,860 selvforklarende navn. 100 00:05:23,860 --> 00:05:27,370 De return true hvis den gitte karakter er store eller små, 101 00:05:27,370 --> 00:05:28,740 henholdsvis. 102 00:05:28,740 --> 00:05:33,770 Siden de er boolske, de er nyttig å bruke ettersom forholdene. 103 00:05:33,770 --> 00:05:38,310 >> Hvis isalpha returnerer true, må du å skifte det tegnet av nøkkelen. 104 00:05:38,310 --> 00:05:43,750 Så la oss åpne til ASCIIMath og gjøre noen ASCII matematikk. 105 00:05:43,750 --> 00:05:48,700 Bruken er svært lik bruken for Caesar og tar i en nøkkel på 106 00:05:48,700 --> 00:05:50,870 kommandolinjen. 107 00:05:50,870 --> 00:05:59,590 >> Hvis jeg kjører ASCIIMath 5, synes det å legge Fem til en, noe som gir me bokstaven F, og 108 00:05:59,590 --> 00:06:01,260 viser ASCII verdi. 109 00:06:01,260 --> 00:06:04,090 Så la oss ta en titt på programmet. 110 00:06:04,090 --> 00:06:11,820 >> Du lurer kanskje på, akkurat her, hvorfor Brevet er et heltall, når det er 111 00:06:11,820 --> 00:06:14,330 tydelig, vel, et brev. 112 00:06:14,330 --> 00:06:17,690 Det viser seg at tegn og heltall er utskiftbare. 113 00:06:17,690 --> 00:06:21,730 Ved å sette bokstaven A i single anførselstegn, kan heltall lagre 114 00:06:21,730 --> 00:06:25,390 ASCII verdien av kapital A. Vær forsiktig, skjønt. 115 00:06:25,390 --> 00:06:27,150 Du trenger de enkle klær. 116 00:06:27,150 --> 00:06:31,260 Uten de enkle anførselstegn, den kompilatoren ville se etter en variabel 117 00:06:31,260 --> 00:06:35,510 kalt A, og ikke tegnet. 118 00:06:35,510 --> 00:06:42,140 >> Da jeg legge brev og en nøkkel, lagring av sum i int variabler resultat. 119 00:06:42,140 --> 00:06:47,740 Selv om resultatet er av datatype heltall, bruker min printf uttalelse 120 00:06:47,740 --> 00:06:50,370 % C plassholder for tegn. 121 00:06:50,370 --> 00:06:54,530 Slik at programmet skriver ut tegnet forbundet med den heltall resultat. 122 00:06:54,530 --> 00:07:00,400 Og siden vi trykket heltall form også ved hjelp% d, ser vi 123 00:07:00,400 --> 00:07:02,110 antall i tillegg. 124 00:07:02,110 --> 00:07:04,450 Så nå kan du se at vi behandle tegn og 125 00:07:04,450 --> 00:07:06,980 heltall, og vice versa. 126 00:07:06,980 --> 00:07:12,205 >> La oss teste ut ASCIIMath noen flere ganger med 25 som en nøkkel. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Vi får bokstaven z. 129 00:07:17,090 --> 00:07:19,750 Nå prøver vi 26. 130 00:07:19,750 --> 00:07:25,600 Vi ønsker å få bokstaven a, men i stedet får vi en venstre brakett. 131 00:07:25,600 --> 00:07:29,490 Så åpenbart, bare legge den Nøkkelen til brevet ikke vil gjøre. 132 00:07:29,490 --> 00:07:32,780 Vi trenger å finne ut en formel til å vikle rundt alfabetet, som vår 133 00:07:32,780 --> 00:07:34,570 eksempel i begynnelsen gjorde. 134 00:07:34,570 --> 00:07:38,520 >> En formel for Cæsars skift er som følger. 135 00:07:38,520 --> 00:07:42,750 c er lik p pluss k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Husk at modulo er et nyttig operasjon som gir oss den resterende 137 00:07:46,040 --> 00:07:49,880 å dele en rekke av den andre. 138 00:07:49,880 --> 00:07:54,870 La oss bruke denne formelen til sletten Teksten brev med en nøkkel av to. 139 00:07:54,870 --> 00:08:01,810 ASCII verdien av y er 89, noe som gir oss 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 som tilsvarer 13 - 141 00:08:03,690 --> 00:08:08,740 definitivt ikke ASCII-verdien av en, er der 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor meg nå og bevege seg bort fra ASCII-verdier til en alfabetisk indeks 143 00:08:12,810 --> 00:08:18,690 hvor A er null og Z er 25, noe som betyr at Y er 24. 144 00:08:18,690 --> 00:08:25,830 24 2 pluss, 6 modulo, gir oss 26, 26 modulo, 0, som er 145 00:08:25,830 --> 00:08:28,170 alfabetisk indeks over en. 146 00:08:28,170 --> 00:08:32,980 Så denne formelen ser ut til å gjelde for alfabetisk indeks over brevet og 147 00:08:32,980 --> 00:08:34,960 ikke sin ASCII verdi. 148 00:08:34,960 --> 00:08:37,630 >> Men du starter med ASCII-verdier. 149 00:08:37,630 --> 00:08:41,650 Og for å skrive ut den krypterte teksten karakter, du trenger sin ASCII verdi også. 150 00:08:41,650 --> 00:08:46,400 Det er opp til deg, da, for å finne ut hvordan å bytte frem og tilbake. 151 00:08:46,400 --> 00:08:49,850 >> Når du finne ut den rette formelen for ett tegn, alt du trenger å gjøre 152 00:08:49,850 --> 00:08:53,520 er å bruke den samme formelen til hver brev i ren tekst - 153 00:08:53,520 --> 00:08:57,720 bare hvis det brevet er alfabetisk, selvfølgelig. 154 00:08:57,720 --> 00:09:02,360 Og husk at du trenger å bevare tilfelle, øvre eller nedre, det er der 155 00:09:02,360 --> 00:09:06,890 den isUpper og isLower funksjoner nevnt tidligere vil komme godt med. 156 00:09:06,890 --> 00:09:08,830 Du har kanskje to formler - 157 00:09:08,830 --> 00:09:11,680 en for store bokstaver og en for små bokstaver. 158 00:09:11,680 --> 00:09:18,420 Så isUpper en isLower vil hjelpe deg bestemme hvilken formel til å søke. 159 00:09:18,420 --> 00:09:22,460 >> Hvordan søker du formelen til hver enkelt tegn i en streng? 160 00:09:22,460 --> 00:09:25,910 Vel, er en streng bare en rekke tegn. 161 00:09:25,910 --> 00:09:31,150 Slik at du kan få tilgang til hver karakter ved gruppering over hver karakter i 162 00:09:31,150 --> 00:09:33,450 string i en for loop. 163 00:09:33,450 --> 00:09:37,550 Som for tilstanden din for loop, funksjonen strlen, for streng 164 00:09:37,550 --> 00:09:39,280 lengde, vil komme godt med. 165 00:09:39,280 --> 00:09:44,020 Det tar i en streng som input og gir lengden av strengen. 166 00:09:44,020 --> 00:09:49,250 Sørg for å ta med riktig bibliotek å bruke den strenglengde funksjon. 167 00:09:49,250 --> 00:09:51,790 >> Og der har du din krypterte teksten. 168 00:09:51,790 --> 00:09:53,260 Mitt navn er Zamyla. 169 00:09:53,260 --> 00:09:54,510 Og [SNAKKE CODE]. 170 00:09:54,510 --> 00:10:02,944