1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA Chan: Gratulojn sur fini vian 3 00:00:11,270 --> 00:00:13,200 unua paro de C programoj. 4 00:00:13,200 --> 00:00:16,379 Mi scias, ke via unua incursión C sintakso povas esti fortimiga. 5 00:00:16,379 --> 00:00:20,060 Sed mi certigas vin, al la fino de la Kompreneble, vi povos rigardi la 6 00:00:20,060 --> 00:00:23,870 unua paro de taskoj kaj kompletigi ilin en minutoj. 7 00:00:23,870 --> 00:00:27,830 >> Nun ke vi fariĝas pli familiara kun sintakso, ni iru al Cezaro. 8 00:00:27,830 --> 00:00:31,720 En Cezaro, la uzanto sendi al entjero klavo kiel komanda linio 9 00:00:31,720 --> 00:00:35,300 argumento, tiam entajpi ebenaĵo teksto mesaĝon ĉe la prompto. 10 00:00:35,300 --> 00:00:38,050 La programo estos tiam encipher la teksto kaj presita 11 00:00:38,050 --> 00:00:40,020 iliaj ĉifrita teksto mesaĝo. 12 00:00:40,020 --> 00:00:42,980 >> La enciphering por Cezaro estas sufiĉe simpla. 13 00:00:42,980 --> 00:00:46,455 Shift ĉiu litero, en siaj plata teksto, por la ŝlosilo. 14 00:00:46,455 --> 00:00:49,220 Kiel rezulto, estas ankaŭ bela necerta. 15 00:00:49,220 --> 00:00:53,850 Sed apliki Cezaro enkondukos nin al ASCIIMath kaj tabelo datumoj 16 00:00:53,850 --> 00:00:54,460 strukturoj. 17 00:00:54,460 --> 00:00:57,510 Ni ricevos pli kompleksa ĉifroj poste. 18 00:00:57,510 --> 00:01:01,680 Kun Cezaro ŝlosilo de 2, la litero A en plata teksto estus reprezentita de 19 00:01:01,680 --> 00:01:07,580 la litero C en ĉifrita teksto ĉar C estas du literoj post A. B estus 20 00:01:07,580 --> 00:01:12,450 reprezentita de D kaj C por E. Al la fino de la alfabeto, W estas 21 00:01:12,450 --> 00:01:18,550 reprezentita de Y, kaj X per Z. Sed Y ĝi ne havas du literojn post ĝi, do 22 00:01:18,550 --> 00:01:21,070 la ĉifroj kovras ĉirkaŭ la alfabeto. 23 00:01:21,070 --> 00:01:27,190 Y en plata teksto estas tiel reprezentita de Al en ĉifrita teksto, kaj Z de B. Ĝi povas 24 00:01:27,190 --> 00:01:32,080 helpi por vidi kiel la cezaro Cypher kiel kontinua alfabeto rado. 25 00:01:32,080 --> 00:01:35,760 >> Por encipher liaj tekstoj, la uzanto eniros du argumentoj 26 00:01:35,760 --> 00:01:37,090 en la komandlinio - 27 00:01:37,090 --> 00:01:40,010 . / Cezaro sekvis per ŝlosilo. 28 00:01:40,010 --> 00:01:44,710 Kiel ĉiam, ni ne povas fidi la uzanto tute eniri enigo kiuj faras 29 00:01:44,710 --> 00:01:45,800 senson por nia programo. 30 00:01:45,800 --> 00:01:50,670 Do ni devos validigi siajn komandlinio enigo. 31 00:01:50,670 --> 00:01:57,285 >> Anstataŭ uzi int main malplenon, ni estas uzante int main, int argc, argv kordo. 32 00:01:57,285 --> 00:02:01,730 La entjera variablo argc reprezentas la nombro de argumentoj pasis en 33 00:02:01,730 --> 00:02:02,880 la komandlinio. 34 00:02:02,880 --> 00:02:09,070 Kaj argv estas tabelo, aŭ pensi pri tio kiel listo, el la argumentoj pasis in 35 00:02:09,070 --> 00:02:12,000 >> Do por Cezaro, kiel ni validigi la uzanto eniro? 36 00:02:12,000 --> 00:02:15,870 Nu, ili nur devas eniri du komandlinio argumentoj - 37 00:02:15,870 --> 00:02:18,150 . / Cezaro kaj ŝlosilo. 38 00:02:18,150 --> 00:02:22,340 Do se argc ne 2, kiu signifas, ke ili ankaŭ forgesis ŝlosilon kaj justa 39 00:02:22,340 --> 00:02:27,230 eniris. / Cezaro, aŭ ili eniris multnombraj klavoj. 40 00:02:27,230 --> 00:02:29,770 >> Se ĉi tiu estas la kazo, tiam vi deziras presi instrukcioj 41 00:02:29,770 --> 00:02:30,910 kaj forlasis la programon. 42 00:02:30,910 --> 00:02:34,320 Ili bezonos reprovi de la komandlinio. 43 00:02:34,320 --> 00:02:37,430 Sed eĉ se argc estas 2, vi instruos vin bezonas kontroli ĉu ili 44 00:02:37,430 --> 00:02:39,100 doni al vi validan ŝlosilon. 45 00:02:39,100 --> 00:02:40,730 Por Cezaro, vi bezonas entjero. 46 00:02:40,730 --> 00:02:43,260 Sed argv estas tabelo de kordoj. 47 00:02:43,260 --> 00:02:46,490 Kiel vi aliri al tiu klavo? 48 00:02:46,490 --> 00:02:47,850 >> Rapida rigardi arrays - 49 00:02:47,850 --> 00:02:51,410 datumstrukturoj kiuj entenas multnombrajn valoroj de la sama datumtipo. 50 00:02:51,410 --> 00:02:55,350 Elementoj estas nulo-indeksitaj, signifante ke la unua elemento estas la indekso nulo 51 00:02:55,350 --> 00:03:00,260 kaj la lasta elemento estas indekso grandeco minus 1, kie grandeco estas la nombro de 52 00:03:00,260 --> 00:03:02,850 eroj en la tabelo. 53 00:03:02,850 --> 00:03:07,380 >> Se mi deklaris novan ĉenon tabelo leterkesto de longo 3, vide, ĝi 54 00:03:07,380 --> 00:03:08,570 aspektas kiel ĉi tio. 55 00:03:08,570 --> 00:03:11,520 Tri ujoj por kordoj , Flanko ĉe flanko. 56 00:03:11,520 --> 00:03:15,445 Por aliri al iu ero, vi tajpi la nomon de la tabelo kaj poste indiki 57 00:03:15,445 --> 00:03:18,080 la indekso en kvadrataj krampoj. 58 00:03:18,080 --> 00:03:21,610 Jen, mi atribui valoron al ĉiu elemento, kiel mi farus kun ajna 59 00:03:21,610 --> 00:03:24,310 aliaj kordoj variablo. 60 00:03:24,310 --> 00:03:29,020 >> Do por atingi nian komandlinio argumentoj, ĉiuj ni devas fari estas aliro 61 00:03:29,020 --> 00:03:31,690 la dekstra elemento de la argv tabelo. 62 00:03:31,690 --> 00:03:37,360 Se la uzanto eniris. / Blastoff Teamo Raketo en la fina stacio, argv 0 farus 63 00:03:37,360 --> 00:03:38,950 esti. / blastoff. 64 00:03:38,950 --> 00:03:45,010 argv estus Team, kaj arg2 estus raketo. 65 00:03:45,010 --> 00:03:47,670 >> Nun ni povas aliri nian ŝlosilo, ni ankoraŭ bezonos fari 66 00:03:47,670 --> 00:03:49,040 certas, ke ĝi estas ĝusta. 67 00:03:49,040 --> 00:03:51,060 Ni devas konverti ĝin en entjero. 68 00:03:51,060 --> 00:03:54,680 Sed ni ne povas simple jxeti kiel ni faris antaŭe. 69 00:03:54,680 --> 00:03:58,800 Bonŝance, la A al Y funkcio prizorgas de ĉi tio por ni kaj eĉ revenas 0 70 00:03:58,800 --> 00:04:02,110 se la kordo ne povas esti konvertita en entjero. 71 00:04:02,110 --> 00:04:04,450 Ĝi dependas de vi, kvankam, por diri al la uzanto kial vi ne faros 72 00:04:04,450 --> 00:04:06,220 lasu la programon procedi. 73 00:04:06,220 --> 00:04:10,710 Stoki la rezulto de A al Y en entjero, kaj tie vi havas vian ŝlosilon. 74 00:04:10,710 --> 00:04:12,070 La sekva parto estas simpla. 75 00:04:12,070 --> 00:04:15,940 Instigas la uzanto por lia simpla teksto, kiu estos de datumtipo kordo. 76 00:04:15,940 --> 00:04:18,339 Feliĉe por ni, ĉiuj uzanto inputted kordoj estas validaj. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Nun ke ni havas ĉiujn necesajn enigo de la uzanto, estas tempo por ni 79 00:04:24,760 --> 00:04:26,520 encipher lian mesaĝon. 80 00:04:26,520 --> 00:04:29,200 La koncepto de Cezaro estas simpla sufiĉe por kompreni. 81 00:04:29,200 --> 00:04:33,750 Sed kiel via komputilo scias kion leteroj venas post unu al alia? 82 00:04:33,750 --> 00:04:36,100 >> Tie estas kie la ASCII tablo venas in 83 00:04:36,100 --> 00:04:39,420 Ĉiu karaktero havas entjero nombro asociita kun ĝi. 84 00:04:39,420 --> 00:04:41,380 Ĉefurbo A estas 65. 85 00:04:41,380 --> 00:04:43,310 Ĉefurbo B estas 66. 86 00:04:43,310 --> 00:04:45,260 Minuskla a estas 97. 87 00:04:45,260 --> 00:04:47,590 Minuskla b estas 98. 88 00:04:47,590 --> 00:04:50,770 Sed karakteroj ne estas limigitaj al nur alfabeta nombroj. 89 00:04:50,770 --> 00:04:56,020 Ekzemple, la @ simbolo estas ASCII numeron 64. 90 00:04:56,020 --> 00:04:59,690 >> Antaŭ kontraktanta kun la tuta ĉeno, ni ŝajnigi ni nur devas ŝovi, ŝovo 91 00:04:59,690 --> 00:05:01,220 unu signo. 92 00:05:01,220 --> 00:05:04,640 Nu, ni nur volas ŝanĝi reala literoj en la simpla teksto, ne 93 00:05:04,640 --> 00:05:06,020 karakteroj aŭ nombroj. 94 00:05:06,020 --> 00:05:09,100 Do la unua aĵo kiun ni volas kontrolu estas ĉu la karaktero estas en 95 00:05:09,100 --> 00:05:10,430 la alfabeto. 96 00:05:10,430 --> 00:05:14,460 >> La funkcio isalpha faras tion por ni kaj resendas Bulea - 97 00:05:14,460 --> 00:05:18,570 vera se la karakteroj estas litero, malvera se alie. 98 00:05:18,570 --> 00:05:22,270 Du aliaj utilaj funkcioj estas isupper kaj islower, kun 99 00:05:22,270 --> 00:05:23,860 mem-klarigan nomoj. 100 00:05:23,860 --> 00:05:27,370 Ili revenas vera se la donita karaktero estas majuskla aŭ minuskla, 101 00:05:27,370 --> 00:05:28,740 respektive. 102 00:05:28,740 --> 00:05:33,770 Ĉar ili estas Booleans, ili estas utilaj por uzi kiel kondiĉoj. 103 00:05:33,770 --> 00:05:38,310 >> Se isalpha revenas vera, vi bezonos movi ke karaktero de la ŝlosilo. 104 00:05:38,310 --> 00:05:43,750 Do ni malfermu al ASCIIMath kaj faru iujn ASCII math. 105 00:05:43,750 --> 00:05:48,700 La uzo estas tre simila al la uzado por Cezaro kaj prenas en ŝlosila en la 106 00:05:48,700 --> 00:05:50,870 komandlinio. 107 00:05:50,870 --> 00:05:59,590 >> Se mi kuras ASCIIMath 5, ŝajnas aldoni 5 al a, donante al mi la leteron f, kaj 108 00:05:59,590 --> 00:06:01,260 montri la ASCII valoro. 109 00:06:01,260 --> 00:06:04,090 Do ni rigardu la programo. 110 00:06:04,090 --> 00:06:11,820 >> Vi povus demandi, ĝuste ĉi tie, kial litero estas entjero, kiam ĝi estas 111 00:06:11,820 --> 00:06:14,330 klare, nu, leteron. 112 00:06:14,330 --> 00:06:17,690 Ĝi rezultas ke karakteroj kaj entjeroj estas interŝanĝeblaj. 113 00:06:17,690 --> 00:06:21,730 Por meti la literon A en sola citiloj, la entjero povas stoki 114 00:06:21,730 --> 00:06:25,390 la ASCII valoro de kapitalo A. Atentu, tamen. 115 00:06:25,390 --> 00:06:27,150 Vi bezonas la sola vestojn. 116 00:06:27,150 --> 00:06:31,260 Sen la sola citiloj, la tradukilo serĉus variablo 117 00:06:31,260 --> 00:06:35,510 nomata A, kaj ne la karakteron. 118 00:06:35,510 --> 00:06:42,140 >> Tiam mi aldonas literon kaj ŝlosilo, stokante la sumo en la int variabloj rezulto. 119 00:06:42,140 --> 00:06:47,740 Eĉ se rezulto estas de datumtipo entjera, mia printf deklaro uzas la 120 00:06:47,740 --> 00:06:50,370 % C lokokupilo por gravuloj. 121 00:06:50,370 --> 00:06:54,530 Do la programo presas la karaktero asociita kun la entjera rezulto. 122 00:06:54,530 --> 00:07:00,400 Kaj ĉar ni presis la entjero formo tiel uzante% d, ni vidas 123 00:07:00,400 --> 00:07:02,110 la nombro tiel. 124 00:07:02,110 --> 00:07:04,450 Do nun vi povas vidi, ke ni trakti karakteroj kaj 125 00:07:04,450 --> 00:07:06,980 entjeroj, kaj inverse. 126 00:07:06,980 --> 00:07:12,205 >> Ni provo el ASCIIMath kelkaj pli fojoj uzante 25 kiel ŝlosilo. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Ni ricevas la literon z. 129 00:07:17,090 --> 00:07:19,750 Nun ni provas 26. 130 00:07:19,750 --> 00:07:25,600 Ni volas ricevi la literon a, sed anstataŭ ni enmetu maldekstran krampon. 131 00:07:25,600 --> 00:07:29,490 Do evidente, nur aldonante la ŝlosilo al la letero ne faros. 132 00:07:29,490 --> 00:07:32,780 Ni devas eltrovi formulon por enpaki ĉirkaŭ la alfabeto, kiel nia 133 00:07:32,780 --> 00:07:34,570 Ekzemple en la komenco faris. 134 00:07:34,570 --> 00:07:38,520 >> Al formulo por la cezara shift estas kiel sekvas. 135 00:07:38,520 --> 00:07:42,750 c egalas p plus k module 26. 136 00:07:42,750 --> 00:07:46,040 Memoru ke module estas utila operacion kiu donas al ni la reston 137 00:07:46,040 --> 00:07:49,880 la dividadon de unu nombron por la alia. 138 00:07:49,880 --> 00:07:54,870 Ni apliki tiun formulon al la ebenaĵo teksto litero kun Ŝlosilo de 2. 139 00:07:54,870 --> 00:08:01,810 La ASCII valoro de y estas 89, kiuj donas al ni 91 module 26, 140 00:08:01,810 --> 00:08:03,690 kiu egalas 13 - 141 00:08:03,690 --> 00:08:08,740 certe ne la ASCII valoro de, kiu estas 67. 142 00:08:08,740 --> 00:08:12,810 >> Humor min nun kaj malproksimigi de la ASCII valoroj al alfabeta indekso 143 00:08:12,810 --> 00:08:18,690 kie A estas nulo kaj Z estas 25, signifante ke Y estas 24. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, module 6 donas al ni 26, module 26, 0, kio estas la 145 00:08:25,830 --> 00:08:28,170 alfabeta indekso de. 146 00:08:28,170 --> 00:08:32,980 Do tiu formulo ŝajnas apliki al la alfabeta indekso de la letero kaj 147 00:08:32,980 --> 00:08:34,960 ne lia ASCII valoro. 148 00:08:34,960 --> 00:08:37,630 >> Sed vi komencu per ASCII valoroj. 149 00:08:37,630 --> 00:08:41,650 Kaj presi la ĉifrita teksto karaktero, vi bezonos lian ASCII valoro tiel. 150 00:08:41,650 --> 00:08:46,400 Ĝi dependas de vi, do por eltrovi kiel ŝanĝi reen. 151 00:08:46,400 --> 00:08:49,850 >> Unufoje vi diveni la rajton formulo por unu signo, ĉiuj vi bezonas fari 152 00:08:49,850 --> 00:08:53,520 estas apliki la saman formulon por ĉiu letero en la simpla teksto - 153 00:08:53,520 --> 00:08:57,720 nur se tiu letero estas alfabeta, kompreneble. 154 00:08:57,720 --> 00:09:02,360 Kaj memoru, ke vi bezonas konservi la kazo, supra aŭ suba, tio estas kie 155 00:09:02,360 --> 00:09:06,890 la isUpper kaj isLower funkcioj menciita pli frue venos en oportuna. 156 00:09:06,890 --> 00:09:08,830 Vi povus havi du formulojn - 157 00:09:08,830 --> 00:09:11,680 unu por majusklajn literojn kaj unu por minuskle. 158 00:09:11,680 --> 00:09:18,420 Do isUpper an isLower helpos vin determini kiu formulo apliki. 159 00:09:18,420 --> 00:09:22,460 >> Kiel vi aplikas vian formulon al ĉiu sola karaktero en ĉeno? 160 00:09:22,460 --> 00:09:25,910 Nu, ĉeno estas nur tabelo de karakteroj. 161 00:09:25,910 --> 00:09:31,150 Do vi povas aliri al ĉiu karaktero de kolektante super ĉiu signo en la 162 00:09:31,150 --> 00:09:33,450 kordo en buklo for. 163 00:09:33,450 --> 00:09:37,550 Koncerne al la kondiĉo de via por ciklo, la funkcio strlen, por kordoj 164 00:09:37,550 --> 00:09:39,280 longitudo, venos en oportuna. 165 00:09:39,280 --> 00:09:44,020 Ĝi portas en ĉeno kiel enigo kaj Revenas la longo de tiu linio. 166 00:09:44,020 --> 00:09:49,250 Certiĝu por inkludi la dekstra biblioteko uzi la korda longeco funkcio. 167 00:09:49,250 --> 00:09:51,790 >> Kaj jen vi havas vian ĉifrita teksto. 168 00:09:51,790 --> 00:09:53,260 Mia nomo estas la Zamyla. 169 00:09:53,260 --> 00:09:54,510 Kaj [parolante CODE]. 170 00:09:54,510 --> 00:10:02,944