1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Tillykke om efterbehandling dit 3 00:00:11,270 --> 00:00:13,200 første par af C-programmer. 4 00:00:13,200 --> 00:00:16,379 Jeg ved, at din første strejftog ind C syntaks kan være skræmmende. 5 00:00:16,379 --> 00:00:20,060 Men jeg kan forsikre dig, ved afslutningen af ​​den Selvfølgelig, vil du være i stand til at se på 6 00:00:20,060 --> 00:00:23,870 første par opgaver, og fuldføre dem på få minutter. 7 00:00:23,870 --> 00:00:27,830 >> Nu, at du får mere fortrolig med syntaks, lad os komme til Cæsar. 8 00:00:27,830 --> 00:00:31,720 I Caesar, vil brugeren indgive en heltal nøgle som en kommandolinje 9 00:00:31,720 --> 00:00:35,300 argument, og indtast derefter en almindelig tekstbesked ved prompten. 10 00:00:35,300 --> 00:00:38,050 Programmet vil derefter kryptografere teksten og udskrive 11 00:00:38,050 --> 00:00:40,020 deres kryptograferede tekstmeddelelse. 12 00:00:40,020 --> 00:00:42,980 >> Den krypteringsudstyr for Caesar er ganske enkel. 13 00:00:42,980 --> 00:00:46,455 Skift hvert bogstav i deres almindelig tekst, ved nøgle. 14 00:00:46,455 --> 00:00:49,220 Som et resultat, er det også temmelig usikker. 15 00:00:49,220 --> 00:00:53,850 Men gennemførelse Caesar vil indføre os til ASCIIMath og matrix data 16 00:00:53,850 --> 00:00:54,460 strukturer. 17 00:00:54,460 --> 00:00:57,510 Vi vil komme til mere komplekse ciphers senere. 18 00:00:57,510 --> 00:01:01,680 Med en Cæsar nøgle 2, bogstavet A i almindelig tekst vil blive repræsenteret af 19 00:01:01,680 --> 00:01:07,580 bogstavet C i ciphertext fordi C er to bogstaver efter A. B ville være 20 00:01:07,580 --> 00:01:12,450 repræsenteret ved D og C af E. Mod slutningen af ​​alfabetet, W er 21 00:01:12,450 --> 00:01:18,550 repræsenteret ved Y og X ved Z. Men Y ikke har to bogstaver efter det, så 22 00:01:18,550 --> 00:01:21,070 de ciphers ombrydes omkring alfabetet. 23 00:01:21,070 --> 00:01:27,190 Y i klartekst er således repræsenteret ved A i ciphertext, og Z ved B. Det kan 24 00:01:27,190 --> 00:01:32,080 hjælpe med at se Cæsar Cypher lide en kontinuerlig alfabet hjul. 25 00:01:32,080 --> 00:01:35,760 >> At kryptografere deres tekst, brugeren træder to argumenter 26 00:01:35,760 --> 00:01:37,090 i kommandolinjen - 27 00:01:37,090 --> 00:01:40,010 . / Caesar efterfulgt af en nøgle. 28 00:01:40,010 --> 00:01:44,710 Som altid kan vi ikke stole på brugeren helt at indtaste input, der gør 29 00:01:44,710 --> 00:01:45,800 mening for vores program. 30 00:01:45,800 --> 00:01:50,670 Så vi bliver nødt til at validere deres kommandolinje-indgang. 31 00:01:50,670 --> 00:01:57,285 >> I stedet for at bruge int main tomrum, er vi hjælp int main, int argc, string argv. 32 00:01:57,285 --> 00:02:01,730 Den heltalsvariabel argc repræsenterer antallet af argumenter passeret ind 33 00:02:01,730 --> 00:02:02,880 kommandolinjen. 34 00:02:02,880 --> 00:02:09,070 Og argv er et array, eller tænke på det som en liste af de argumenter gik i. 35 00:02:09,070 --> 00:02:12,000 >> Så for Cæsar, hvordan vi validerer brugerens indlæsning? 36 00:02:12,000 --> 00:02:15,870 Nå, skal de kun være på vej ind to kommandolinjeargumenter - 37 00:02:15,870 --> 00:02:18,150 . / Cæsar og en nøgle. 38 00:02:18,150 --> 00:02:22,340 Så hvis argc ikke er 2, det betyder, at de enten glemt en nøgle og bare 39 00:02:22,340 --> 00:02:27,230 indtastet. / caesar, eller de indtastet flere nøgler. 40 00:02:27,230 --> 00:02:29,770 >> Hvis dette er tilfældet, så vil du ønsker at udskrive vejledningen 41 00:02:29,770 --> 00:02:30,910 og afslutte programmet. 42 00:02:30,910 --> 00:02:34,320 De bliver nødt til at prøve igen fra kommandolinjen. 43 00:02:34,320 --> 00:02:37,430 Men selv hvis argc er 2, vil du brug for at kontrollere, om de 44 00:02:37,430 --> 00:02:39,100 giver dig en gyldig nøgle. 45 00:02:39,100 --> 00:02:40,730 For Cæsar, du har brug et heltal. 46 00:02:40,730 --> 00:02:43,260 Men argv er en vifte af strenge. 47 00:02:43,260 --> 00:02:46,490 Hvordan får du adgang denne nøgle? 48 00:02:46,490 --> 00:02:47,850 >> Et hurtigt kig på arrays - 49 00:02:47,850 --> 00:02:51,410 datastrukturer, der holder flere værdier af samme datatype. 50 00:02:51,410 --> 00:02:55,350 Posterne nul-indekseret, hvilket betyder, at det første element er indekset nul 51 00:02:55,350 --> 00:03:00,260 og det sidste element er på indeks størrelse minus 1, hvor størrelse er antallet af 52 00:03:00,260 --> 00:03:02,850 elementer i array. 53 00:03:02,850 --> 00:03:07,380 >> Hvis jeg erklæret en ny streng vifte postkasse af længde 3, visuelt, det 54 00:03:07,380 --> 00:03:08,570 ligner dette. 55 00:03:08,570 --> 00:03:11,520 Tre containere for strygere , Side om side. 56 00:03:11,520 --> 00:03:15,445 For at få adgang ethvert element, du skriver navnet af array'et og derefter angive 57 00:03:15,445 --> 00:03:18,080 indekset i firkantede parenteser. 58 00:03:18,080 --> 00:03:21,610 Her, jeg tildele en værdi til hver element, ligesom jeg ville gøre med ethvert 59 00:03:21,610 --> 00:03:24,310 anden streng variabel. 60 00:03:24,310 --> 00:03:29,020 >> Så for at få adgang til vores kommandolinjeargumenter, alt, hvad vi skal gøre er at få adgang til 61 00:03:29,020 --> 00:03:31,690 den højre del af argv array. 62 00:03:31,690 --> 00:03:37,360 Hvis brugeren har indtastet. / Blastoff Team Rocket ind 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 raket. 65 00:03:45,010 --> 00:03:47,670 >> Nu, hvor vi kan få adgang til vores nøgle, vi stadig nødt til at gøre 66 00:03:47,670 --> 00:03:49,040 sikker på, at den er korrekt. 67 00:03:49,040 --> 00:03:51,060 Vi er nødt til at omdanne det til et heltal. 68 00:03:51,060 --> 00:03:54,680 Men vi kan ikke bare kaste ligesom vi har gjort tidligere. 69 00:03:54,680 --> 00:03:58,800 Heldigvis A til Y-funktion tager sig af dette for os og endda returnerer 0 70 00:03:58,800 --> 00:04:02,110 hvis strengen ikke kan konverteres i et heltal. 71 00:04:02,110 --> 00:04:04,450 Det er op til dig, selv om, at fortælle brugeren, hvorfor du ikke vil 72 00:04:04,450 --> 00:04:06,220 lade programmet fortsætte. 73 00:04:06,220 --> 00:04:10,710 Gemme resultatet af A til Y i en tal, og der har du din nøgle. 74 00:04:10,710 --> 00:04:12,070 Den næste del er enkel. 75 00:04:12,070 --> 00:04:15,940 Bede brugeren om deres almindelig tekst, der vil være af datatypen strengen. 76 00:04:15,940 --> 00:04:18,339 Heldigvis for os indtastet al bruger strenge er gyldige. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nu da vi har alle nødvendige input fra brugeren, er det tid for os at 79 00:04:24,760 --> 00:04:26,520 kryptografere deres budskab. 80 00:04:26,520 --> 00:04:29,200 Begrebet Cæsar er simpelt nok at forstå. 81 00:04:29,200 --> 00:04:33,750 Men hvordan din computer vide, hvilke breve kommer efter hinanden? 82 00:04:33,750 --> 00:04:36,100 >> Her er hvor ASCII tabellen kommer ind 83 00:04:36,100 --> 00:04:39,420 Hver karakter har et heltal række 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å bogstaver a er 97. 87 00:04:45,260 --> 00:04:47,590 Lowercase b er 98. 88 00:04:47,590 --> 00:04:50,770 Men tegn er ikke begrænset til kun alfabetiske numre. 89 00:04:50,770 --> 00:04:56,020 For eksempel symbolet @ er ASCII tal 64.. 90 00:04:56,020 --> 00:04:59,690 >> Før der beskæftiger sig med hele strengen, Lad os lade som om vi bare nødt til at flytte 91 00:04:59,690 --> 00:05:01,220 et tegn. 92 00:05:01,220 --> 00:05:04,640 Nå, vi kun ønsker at flytte den faktiske bogstaver i almindelig tekst, ikke 93 00:05:04,640 --> 00:05:06,020 tegn eller tal. 94 00:05:06,020 --> 00:05:09,100 Så den første ting, vi har lyst til at tjekke, om den karakter er i 95 00:05:09,100 --> 00:05:10,430 alfabetet. 96 00:05:10,430 --> 00:05:14,460 >> Funktionen isalpha gør dette for os og returnerer en boolesk - 97 00:05:14,460 --> 00:05:18,570 tilfældet, hvis tegnene er et brev, falsk, hvis andet. 98 00:05:18,570 --> 00:05:22,270 To andre nyttige funktioner er isupper og islower, med 99 00:05:22,270 --> 00:05:23,860 selvforklarende navne. 100 00:05:23,860 --> 00:05:27,370 De vender tilbage sandt, hvis den givne karakter er store eller små bogstaver, 101 00:05:27,370 --> 00:05:28,740 henholdsvis. 102 00:05:28,740 --> 00:05:33,770 Da de er Booleans, de er nyttigt at bruge som betingelser. 103 00:05:33,770 --> 00:05:38,310 >> Hvis isalpha returnerer true, skal du at flytte denne karakter af nøglen. 104 00:05:38,310 --> 00:05:43,750 Så lad os åbne for ASCIIMath og gøre nogle ASCII matematik. 105 00:05:43,750 --> 00:05:48,700 Brugen er meget lig brugen for Cæsar og tager i en nøgle i 106 00:05:48,700 --> 00:05:50,870 kommandolinjen. 107 00:05:50,870 --> 00:05:59,590 >> Hvis jeg kører ASCIIMath 5, ser det ud til at tilføje 5 til en, giver mig brevet f, og 108 00:05:59,590 --> 00:06:01,260 vise ASCII værdien. 109 00:06:01,260 --> 00:06:04,090 Så lad os tage et kig på programmet. 110 00:06:04,090 --> 00:06:11,820 >> Du vil måske undre, lige her, hvorfor brev er et heltal, når det er 111 00:06:11,820 --> 00:06:14,330 klart, ja, et brev. 112 00:06:14,330 --> 00:06:17,690 Det viser sig, at figurer og heltal er indbyrdes udskiftelige. 113 00:06:17,690 --> 00:06:21,730 Ved at sætte bogstavet A i single anførselstegn, kan heltal gemme 114 00:06:21,730 --> 00:06:25,390 ASCII værdien af ​​kapital A. Vær forsigtig, selv om. 115 00:06:25,390 --> 00:06:27,150 Du har brug for de enkelte tøj. 116 00:06:27,150 --> 00:06:31,260 Uden de enkelte anførselstegn, det compiler ville kigge efter en variabel 117 00:06:31,260 --> 00:06:35,510 kaldes A, og ikke tegnet. 118 00:06:35,510 --> 00:06:42,140 >> Så jeg tilføje brev og en nøgle, lagring af sum i int variabler resultatet. 119 00:06:42,140 --> 00:06:47,740 Selvom resultatet er af datatype heltal, min printf erklæring anvender 120 00:06:47,740 --> 00:06:50,370 % C pladsholder for tegn. 121 00:06:50,370 --> 00:06:54,530 Så udskriver programmet tegnet forbundet med heltal resultat. 122 00:06:54,530 --> 00:07:00,400 Og da vi udskrevet heltal form såvel bruger% d, ser vi 123 00:07:00,400 --> 00:07:02,110 antallet samt. 124 00:07:02,110 --> 00:07:04,450 Så nu kan du se, at vi behandle tegn, og 125 00:07:04,450 --> 00:07:06,980 heltal, og vice versa. 126 00:07:06,980 --> 00:07:12,205 >> Lad os afprøve ASCIIMath et par flere gange ved hjælp 25 som en nøgle. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Vi får brevet z. 129 00:07:17,090 --> 00:07:19,750 Nu prøver vi 26. 130 00:07:19,750 --> 00:07:25,600 Vi ønsker at få bogstavet a, men i stedet får vi en venstre parentes. 131 00:07:25,600 --> 00:07:29,490 Så selvfølgelig, bare tilføje nøgle til brevet ikke vil gøre. 132 00:07:29,490 --> 00:07:32,780 Vi er nødt til at finde ud af en formel til at ombryde omkring alfabetet, lide vores 133 00:07:32,780 --> 00:07:34,570 eksempel i begyndelsen 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 lig p plus k. modulo 26.. 136 00:07:42,750 --> 00:07:46,040 Husk, at modulo er et nyttigt operation, der giver os resten 137 00:07:46,040 --> 00:07:49,880 at dividere et nummer af den anden. 138 00:07:49,880 --> 00:07:54,870 Lad os anvende denne formel til sletten text brev med en nøgle på 2. 139 00:07:54,870 --> 00:08:01,810 ASCII værdi af y er 89, som giver os 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 der er lig med 13 - 141 00:08:03,690 --> 00:08:08,740 absolut ikke ASCII værdien et, hvilket er 67.. 142 00:08:08,740 --> 00:08:12,810 >> Humor mig nu og bevæge sig væk fra ASCII-værdier til et alfabetisk indeks 143 00:08:12,810 --> 00:08:18,690 hvor A er nul, og Z er 25, hvilket betyder, at Y er 24.. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, modulo 6, giver os 26, modulo 26, 0, som er den 145 00:08:25,830 --> 00:08:28,170 alfabetisk indeks af. 146 00:08:28,170 --> 00:08:32,980 Så denne formel synes at gælde for alfabetisk indeks over brevet og 147 00:08:32,980 --> 00:08:34,960 ikke dens ASCII værdi. 148 00:08:34,960 --> 00:08:37,630 >> Men du starter med ASCII-værdier. 149 00:08:37,630 --> 00:08:41,650 Og for at udskrive ciphertext karakter du får brug for sin ASCII værdi samt. 150 00:08:41,650 --> 00:08:46,400 Det er op til dig, så at finde ud af hvordan du skifter frem og tilbage. 151 00:08:46,400 --> 00:08:49,850 >> Når du regne ud den rigtige formel for ét tegn, skal alt du skal gøre 152 00:08:49,850 --> 00:08:53,520 er anvende den samme formel til hver bogstav i klartekst - 153 00:08:53,520 --> 00:08:57,720 hvis dette brev er alfabetisk, selvfølgelig. 154 00:08:57,720 --> 00:09:02,360 Og husk, at du har brug for at bevare tilfældet, øvre eller nedre, det er hvor 155 00:09:02,360 --> 00:09:06,890 Den isUpper og isLower funktioner tidligere nævnt vil komme i handy. 156 00:09:06,890 --> 00:09:08,830 Du har måske to formler - 157 00:09:08,830 --> 00:09:11,680 én for store bogstaver og en for små. 158 00:09:11,680 --> 00:09:18,420 Så isUpper en isLower vil hjælpe dig afgøre, hvilken formel skal anvendes. 159 00:09:18,420 --> 00:09:22,460 >> Hvordan du anvender din formel til hver enkelt tegn i en streng! 160 00:09:22,460 --> 00:09:25,910 Tja, en streng er blot en vifte af tegn. 161 00:09:25,910 --> 00:09:31,150 Så du kan få adgang til hver karakter ved at gruppering over hver tegn i 162 00:09:31,150 --> 00:09:33,450 streng i en for-løkke. 163 00:09:33,450 --> 00:09:37,550 Hvad tilstanden af ​​din for-løkke, funktionen strlen for streng 164 00:09:37,550 --> 00:09:39,280 længde, vil komme i handy. 165 00:09:39,280 --> 00:09:44,020 Det tager i en streng som input og giver længden af ​​denne streng. 166 00:09:44,020 --> 00:09:49,250 Sørg for at medtage det rigtige bibliotek at bruge strengen længde funktionen. 167 00:09:49,250 --> 00:09:51,790 >> Og der har du din ciphertext. 168 00:09:51,790 --> 00:09:53,260 Mit navn er Zamyla. 169 00:09:53,260 --> 00:09:54,510 Og [SPEAKING CODE]. 170 00:09:54,510 --> 00:10:02,944