1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Oddelek Problem Set 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Harvard University 3 00:00:04,910 --> 00:00:07,410 To je CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Torej, jaz sem Rob. Jaz sem višji v Kirkland. To je moj tretji letnik TFing CS50. 5 00:00:15,770 --> 00:00:22,220 To je prvič, da smo spremenili iz tradicionalnih-predavanje-style oddelka, 6 00:00:22,220 --> 00:00:25,610 kjer smo nekako pregleda, kaj se je zgodilo v predavanju, nato pa fantje postavljajo vprašanja, 7 00:00:25,610 --> 00:00:32,250 zdaj pa veliko bolj problemsko, kjer bomo uporabili prostorov in - 8 00:00:32,250 --> 00:00:37,410 Oh, to je ideja, da gredo na to povezavo sem vam ga poslali, in potem boš v mojem vesolju. 9 00:00:37,410 --> 00:00:42,410 Ali kdo nima laptop? Ok. 10 00:00:42,410 --> 00:00:47,050 Torej bomo uporabljali to in bomo opravljali težav živi v oddelku 11 00:00:47,050 --> 00:00:50,740 in jih obravnavati in ugotoviti, kaj je narobe 12 00:00:50,740 --> 00:00:56,390 in lahko potegnem gor nekaj kode, jaz bi razpravljali vaše ideje. 13 00:00:56,390 --> 00:01:02,140 Torej je kdo imel težave? 14 00:01:02,140 --> 00:01:07,000 Lahko klepetate ob strani, ne vem, če bomo imeli razlog za to. 15 00:01:07,000 --> 00:01:12,270 Zdaj, kot prejšnje supersection, če ste bili v tem razredu, saj veste, kaj to je vse. 16 00:01:12,270 --> 00:01:19,200 Na vseh sklopov P pa se dogaja, da se ti oddelki. 17 00:01:19,200 --> 00:01:22,550 Torej P-set 2, specifikacije, mislim, da ste jo videli na P-set 1 že. 18 00:01:22,550 --> 00:01:27,400 Ampak mi lahko ogledate na P-2 set za to, kar bomo lahko šli čez danes. 19 00:01:27,400 --> 00:01:29,460 In boste videli del vprašanj. 20 00:01:29,460 --> 00:01:37,530 Torej bo to v vseh P-sprejemnikov, da bo del vprašanja. 21 00:01:37,530 --> 00:01:41,340 Do sedaj smo rekel: "Predstavljajte si to priložnost za vajo." 22 00:01:41,340 --> 00:01:44,940 Če se ne bo zahtevalo, da predloži ta program. 23 00:01:44,940 --> 00:01:48,480 Ideja je, da to naj bi nekakšno boste lažje začeli z nizom problemov. 24 00:01:48,480 --> 00:01:53,220 Mislim, da na Hacker različico, veliko od njih naj bi bilo le nove, zanimive stvari, da se učijo. 25 00:01:53,220 --> 00:01:58,590 Ne smejo biti neposredno za problem niz. 26 00:01:58,590 --> 00:02:01,810 In sedaj ne bomo ob vam jih, ampak v teoriji, 27 00:02:01,810 --> 00:02:07,480 za poznejše sklopov težav, lahko jih, in tako lahko pridobijo bodisi z oddelkom 28 00:02:07,480 --> 00:02:10,380 ali pa si oglejte razdelek, da bi dobili odgovore, ali pa samo zaslužiti jih sami 29 00:02:10,380 --> 00:02:16,350 Če se ne počutite kot uživa mojo prisotnost. 30 00:02:16,350 --> 00:02:21,010 Torej - mislim, da je to prvi. 31 00:02:21,010 --> 00:02:29,280 Oh. Tudi v teh oddelkih vprašanj smo si postavljajo vprašanja o kratkih hlačah. 32 00:02:29,280 --> 00:02:33,440 Tako da mislim, v teoriji, moraš gledati jih, preden pride do točke, 33 00:02:33,440 --> 00:02:38,550 ampak to je v redu, če ne, bomo šli nad njimi vseeno. 34 00:02:38,550 --> 00:02:42,590 Torej, lahko začnemo z njimi: "Kako pa zanko razlikujejo od do-while zanko? 35 00:02:42,590 --> 00:02:46,210 Ko je slednji še posebno koristno? " 36 00:02:46,210 --> 00:02:49,390 Torej, kdo sploh -? 37 00:02:49,390 --> 00:02:52,730 [Študent] do-loop, medtem ko bo vedno izvede vsaj enkrat. 38 00:02:52,730 --> 00:03:02,950 Da. Tako, da je razlika. While zanko - Jaz bom samo to tukaj - while zanko, imamo stanje 39 00:03:02,950 --> 00:03:19,760 Tukaj je, ker ne dela, medtem ko ne boste imeli stanje, dokler ne pridemo dol. 40 00:03:19,760 --> 00:03:24,130 In tako, ko je vaš program je izvajanje in pride do while zanko, 41 00:03:24,130 --> 00:03:26,380 nemudoma preveri, ali je ta pogoj izpolnjen. 42 00:03:26,380 --> 00:03:30,710 Če ta pogoj ni res, bo to samo preskočiti zanke v celoti. 43 00:03:30,710 --> 00:03:34,390 Do-while zanko, kot je program izvršitve, da pride do "do". 44 00:03:34,390 --> 00:03:37,920 Nič se ne zgodi v tem trenutku le še izvršitve. 45 00:03:37,920 --> 00:03:42,690 Potem, ko je zadela ", medtem ko", če je pogoj izpolnjen, bo to zanko nazaj in še enkrat 46 00:03:42,690 --> 00:03:46,730 in spet in spet, dokler se stanje ne drži, in šele nato pade skozi. 47 00:03:46,730 --> 00:03:50,600 Torej, razlika je v tem, da lahko to preskočite že od samega začetka. 48 00:03:50,600 --> 00:03:56,770 To nujno izvede enkrat in potem se lahko izvede večkrat, če je izpolnjen pogoj še vedno drži. 49 00:03:56,770 --> 00:04:03,720 Tako bo, medtem ko zanke le to storil takoj, ali - while zanko - morda ne bomo potrebovali, da to storite na vse, 50 00:04:03,720 --> 00:04:07,900 saj takoj, ko bomo prišli do njega, če pogoj ni izpolnjen, se bomo le preskočite desno nad njim. 51 00:04:07,900 --> 00:04:11,770 Ker je do-while zanko, ga bomo izvršiti takoj, nujno. 52 00:04:11,770 --> 00:04:14,560 Potem, ko smo prišli do stanja, da preverite, če je to res ali ne. 53 00:04:14,560 --> 00:04:19,790 Če je to res, bomo še enkrat, če je napačna, bomo samo še naprej. 54 00:04:19,790 --> 00:04:24,680 Torej, ko je slednji še posebno koristno? 55 00:04:24,680 --> 00:04:31,190 Torej lahko rečem, da je v celoti na 4 leta, 3 leta, ne glede, 56 00:04:31,190 --> 00:04:38,780 da sem bil načrtovanje, sem uporabil to, kot, manj kot 10-krat. 57 00:04:38,780 --> 00:04:43,140 In verjetno 5 od njih so CS50 ko smo uvajanje do-while zank. 58 00:04:43,140 --> 00:04:47,510 Torej, kdaj ste se do-while zank? 59 00:04:47,510 --> 00:04:49,510 Ko je - ja? 60 00:04:49,510 --> 00:04:53,180 [Študent] Če hočeš, da se vnos uporabnika ali kaj želite preveriti - 61 00:04:53,180 --> 00:04:59,700 Ja. Torej ne, medtem ko zanke, uporabniški vnos je velik. 62 00:04:59,700 --> 00:05:03,160 Zato je v prvih sklopov problemov nekaj, če želite od uporabnika, recimo, 63 00:05:03,160 --> 00:05:08,520 "Daj mi niz," se ne more nadaljevati, dokler ne boste dobili, da niz. 64 00:05:08,520 --> 00:05:12,980 In tako nujno, je treba vprašati za niz vsaj enkrat. 65 00:05:12,980 --> 00:05:16,950 Ampak potem, če odgovorite kaj slabega, potem morate zanko nazaj in vprašal še enkrat. 66 00:05:16,950 --> 00:05:20,810 Ampak razen povratnih informacij uporabnikov, to je zelo redko, da sem naleteli na primer, 67 00:05:20,810 --> 00:05:27,170 če želim zanke "najmanj enkrat", ampak morda še več. 68 00:05:27,170 --> 00:05:33,370 Vprašanja ali -? Je kdo uporablja do-while zanko kje drugje? 69 00:05:33,370 --> 00:05:36,780 Ok. Torej, naslednjič, je: »Kaj pa neprijavljeno identifikator 70 00:05:36,780 --> 00:05:43,310 običajno navedejo, ali izhodne jih Jek? " 71 00:05:43,310 --> 00:05:47,380 Torej, kakšno oznako bi lahko napisala, da bi dobili "na črno oznako?" 72 00:05:47,380 --> 00:05:49,550 [Študent] To x = 2? 73 00:05:49,550 --> 00:05:52,650 Tako smo lahko samo poskusil sem, x = 2. 74 00:05:52,650 --> 00:06:04,830 Mi bomo teči to - oh, nisem še. Torej, tukaj smo dobili - vse v redu. 75 00:06:04,830 --> 00:06:07,100 "Uporaba neprijavljenih x identifikatorja." 76 00:06:07,100 --> 00:06:11,610 Tako da je neprijavljeno identifikator, spremenljivka. 77 00:06:11,610 --> 00:06:13,910 To bo pogosto zahtevajo različno identifikator. 78 00:06:13,910 --> 00:06:17,300 Tako da ne bi vedel, da je dejansko spremenljivka, vendar pa ne vem, kaj je. 79 00:06:17,300 --> 00:06:19,380 Torej je oznaka. 80 00:06:19,380 --> 00:06:26,060 Torej, zakaj je črno? Ja. 81 00:06:26,060 --> 00:06:32,190 Zato mora biti jasno, o terminologiji, deklaracijo spremenljivke 82 00:06:32,190 --> 00:06:37,360 je, ko rečeš "INT x" ali "niz Y," karkoli. 83 00:06:37,360 --> 00:06:41,910 Inicializacija spremenljivke, ali odstop spremenljivke, 84 00:06:41,910 --> 00:06:44,510 je, ko rečeš "x = 2". 85 00:06:44,510 --> 00:06:52,950 Tako bomo lahko opravite v posameznih fazah, int x, x = 2, in dokler - lahko imamo kup stvari tukaj - 86 00:06:52,950 --> 00:07:00,350 ampak dokler ta postavka se zgodi, je še vedno x nezaceto, vendar pa je bila razglašena. 87 00:07:00,350 --> 00:07:06,760 In tako bomo lahko seveda to storite v 1 linijo, in zdaj smo se obračunajo in inicializacijo. 88 00:07:06,760 --> 00:07:10,730 Vprašanja? 89 00:07:10,730 --> 00:07:18,390 In končno, "Zakaj je Cipher Cezar ni zelo varen?" 90 00:07:18,390 --> 00:07:23,830 Torej, najprej, ali ima kdo rad povedal, kaj Cipher Cezar? 91 00:07:23,830 --> 00:07:28,100 [Študent] Caesar Šifra prav je, da ste map, premaknete vsako pismo, 92 00:07:28,100 --> 00:07:34,420 določeno število črk tja, in se vrnil konec, in to ni zelo varno, saj 93 00:07:34,420 --> 00:07:42,260 tam je le 26 možnih opcij in boste morali poskusiti vsak 1 od tistih, dokler ga ne dobiš. 94 00:07:42,260 --> 00:07:45,470 Oh. Torej, naj ponovim? 95 00:07:45,470 --> 00:07:51,600 Caesar Cipher, it's - mislim, boste morali ukvarjati z njo na težave, ki vas - 96 00:07:51,600 --> 00:07:56,110 ali Mislim, standardno izdajo problemskega sklopa, ki je ni na hacker različico. 97 00:07:56,110 --> 00:08:01,550 Tako na standardno različico na problem niz, boste dobili sporočilo, kot so, "Hello, world" 98 00:08:01,550 --> 00:08:08,410 in imate tudi več kot 6 let, in ste vzeli to sporočilo, in vsak posamezni znak, 99 00:08:08,410 --> 00:08:11,310 ga zavrtite za 6 mest v abecedi. 100 00:08:11,310 --> 00:08:16,560 Tako naj bi bila "h" v zdravo postal h-i-j-k-l-m-n. 101 00:08:16,560 --> 00:08:19,600 Tako bi se prva črka n. Mi isto stvar z e. 102 00:08:19,600 --> 00:08:23,530 Če imamo, recimo, z ali nekaj podobnega, nato pa zavijemo nazaj na "okoli". 103 00:08:23,530 --> 00:08:29,280 Toda vsak lik dobi preklapljajo 6 znakov kasneje v abecedi, in to ni zelo varen 104 00:08:29,280 --> 00:08:35,440 saj so le 26 Možnosti za koliko načinov lahko zavijete eno črko. 105 00:08:35,440 --> 00:08:42,919 Torej si lahko samo poskusil vseh 26 od njih in verjetno za dovolj dolgo sporočilo, 106 00:08:42,919 --> 00:08:46,860 samo 1 od teh možnih 26 stvari, ki se bo čitljiva, 107 00:08:46,860 --> 00:08:50,300 in čitljive 1 se bo izvirno sporočilo. 108 00:08:50,300 --> 00:08:56,240 Torej, to ni zelo dober način za šifriranje ničesar. 109 00:08:56,240 --> 00:08:59,070 Nepovezani teh kratkih hlačah, "Kaj je funkcija?" 110 00:08:59,070 --> 00:09:03,370 Torej, kaj je funkcija? Da. 111 00:09:03,370 --> 00:09:11,640 [Študent] To je kot poseben kos kode, ki jo lahko pokličete, da gredo skozi, nato pa dobil vrnjeno vrednost karkoli. 112 00:09:11,640 --> 00:09:18,160 Ja. Torej bom odgovoriti, tudi z odgovorom na naslednja - ali ponovitev jih tudi preprosto odgovorite na naslednjo. 113 00:09:18,160 --> 00:09:22,410 Lahko uporabite funkcije in ne le kopiranje in lepljenje kode znova in znova. 114 00:09:22,410 --> 00:09:27,200 Vzemi to kodo, jo dal v fuction, nato pa lahko pokličete na telefonsko funkcijo 115 00:09:27,200 --> 00:09:29,870 kjer ste bili kopiranje in lepljenje. 116 00:09:29,870 --> 00:09:33,350 Torej funkcije so koristne. 117 00:09:33,350 --> 00:09:35,860 Torej, zdaj bomo naredili konkretne probleme. 118 00:09:35,860 --> 00:09:46,490 Prvi. Tako je zamisel o prvi je, da si dajati niz, in ne glede na - 119 00:09:46,490 --> 00:09:52,060 ali piše samo male? To ne pomeni samo male. 120 00:09:52,060 --> 00:09:57,730 Tako lahko sporočilo lahko karkoli, in - oh, ne. To počne. 121 00:09:57,730 --> 00:10:01,610 "Zaradi enostavnosti, lahko predpostavimo, da si bo le vnos male črke in presledki." 122 00:10:01,610 --> 00:10:08,180 Tako smo dajati sporočilo s samo malimi črkami, nato pa izmenično 123 00:10:08,180 --> 00:10:15,450 med velikimi in malimi črkami - spremenimo niz za velike in male, izmenično. 124 00:10:15,450 --> 00:10:22,920 Torej, preden smo vam sekundo celo potopite v težave, 125 00:10:22,920 --> 00:10:32,420 Kaj je prva stvar, ki jo morate storiti? 126 00:10:32,420 --> 00:10:36,900 Oh, kaj sem pravkar kliknite na? Oh, sem kliknil na e-pošto v tukaj. 127 00:10:36,900 --> 00:10:42,870 Torej prva stvar, ki jo morate storiti - gledam na napačnem 1? 128 00:10:42,870 --> 00:10:49,320 Je to del tega? 129 00:10:49,320 --> 00:10:51,320 Ne, to so še vedno tam, čeprav. 130 00:10:51,320 --> 00:10:55,160 Ok, še vedno tu. 131 00:10:55,160 --> 00:11:03,160 Zdaj ne moremo prevzeti -? Da. Tu ne moremo domnevati, da je to samo male črke in prostor. 132 00:11:03,160 --> 00:11:07,770 Torej, zdaj imamo opravka z dejstvom, da se lahko z višino črk, kar hočemo, da so. 133 00:11:07,770 --> 00:11:11,910 In tako prva stvar, ki jo želite storiti, je le dobil sporočilo. 134 00:11:11,910 --> 00:11:19,790 Vedeti pa je treba, da bi dobili niz, String s = GetString, v redu. 135 00:11:19,790 --> 00:11:24,890 Zdaj je to problem, obstaja nekaj načinov za njihovo početje. 136 00:11:24,890 --> 00:11:29,840 Ampak bomo želeli uporabljati bitni izvajalce tukaj. 137 00:11:29,840 --> 00:11:35,280 Ali obstajajo ljudje, ki bodisi niso bili na supersection, 138 00:11:35,280 --> 00:11:37,480 ali kaj podobnega, in ne vem, kaj bitni operaterji? 139 00:11:37,480 --> 00:11:41,710 Ali kako so povezani z ASCII na kakršen koli način? 140 00:11:41,710 --> 00:11:45,650 [Študent] nisem bil na supersection, ampak vem, kaj bitni subjekti. 141 00:11:45,650 --> 00:11:49,560 Ok. In potem mi ni treba iti čez osnove od njih, ampak bom razložiti 142 00:11:49,560 --> 00:11:51,830 kaj bomo želeli, da tukaj uporabiti. 143 00:11:51,830 --> 00:11:59,680 Torej "A": Binarno zastopanje kapitala A, številka 65. 144 00:11:59,680 --> 00:12:07,560 Grem gledati - 41 se bo 01000001. 145 00:12:07,560 --> 00:12:14,170 Tako bi moralo biti 65 v desetiško, tako da je to binarna predstavitev kapitala znakov A. 146 00:12:14,170 --> 00:12:19,440 Zdaj, binarna predstavitev značaja male črke "a" 147 00:12:19,440 --> 00:12:33,350 gre za isto stvar, skoraj. Je to - 6, ja. To je v redu. 148 00:12:33,350 --> 00:12:37,670 Torej, binarna kapital, binarni male "." 149 00:12:37,670 --> 00:12:43,940 Torej, opazil, da je razlika med A in "a", je to ena malo. 150 00:12:43,940 --> 00:12:49,440 In to se dogaja, da je 32-bitna, bit predstavlja število 32. 151 00:12:49,440 --> 00:12:53,910 In to je smiselno, saj je 65, "a" 97. 152 00:12:53,910 --> 00:12:56,610 Razlika med njima je 32. 153 00:12:56,610 --> 00:13:03,770 Tako zdaj vemo, da lahko pretvorite od A do "A", s tem, 154 00:13:03,770 --> 00:13:09,710 bitni in ga oring, z -, ki izgleda kot 1. 155 00:13:09,710 --> 00:13:20,900 To je bitni ali z 00100000, in da bomo dali nas '. " 156 00:13:20,900 --> 00:13:26,850 In bomo lahko dobili od "A", ki jih bitni ANDing 157 00:13:26,850 --> 00:13:33,700 z 11, 0 v tem mestu, 11111. 158 00:13:33,700 --> 00:13:43,840 Torej bo to potem nam kaj '"je bil, toda to izniči individualno bit, 159 00:13:43,840 --> 00:13:50,070 zato bomo morali 01000001, ne vem, če sem računal prav. 160 00:13:50,070 --> 00:13:56,750 Toda ta tehnika bitni oring dobili od kapitala v male črke, 161 00:13:56,750 --> 00:14:02,080 bitni in ANDing, da se od male do kapitala ni izključna A. 162 00:14:02,080 --> 00:14:06,510 Vsi dopisi, K vs k, Z vs Z, 163 00:14:06,510 --> 00:14:10,080 vsi so le, da bo razlikoval za to eno samo bit. 164 00:14:10,080 --> 00:14:16,290 In tako lahko uporabite to s katerega koli malo črko za vsako črko in obratno. 165 00:14:16,290 --> 00:14:26,670 Ok. Torej preprost način, kako iz tega - tako, namesto da bi 166 00:14:26,670 --> 00:14:32,170 pisati o vsem, kar je 1011111 - enostaven način predstavlja to številko, in to ni eden 167 00:14:32,170 --> 00:14:39,710 da sem šel v supersection, ampak Tilda (~) je še en bitni operator. 168 00:14:39,710 --> 00:14:42,520 Kaj pa ~ je videti na bit zastopanja. 169 00:14:42,520 --> 00:14:45,630 Vzemimo poljubno število. 170 00:14:45,630 --> 00:14:53,130 To je le nekaj binarno število, in kaj ~ ne gre samo za prezrcali vse bitov. 171 00:14:53,130 --> 00:15:00,630 Torej, to je bilo 1, zdaj 0, to je 0, zdaj 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Tako, da je vse ~ ne. Tako 32 se bo število - znebiti, da - 173 00:15:08,320 --> 00:15:23,320 Tako 32 se bo število 00100000, in tako ~ tega se bo 174 00:15:23,320 --> 00:15:29,980 to število se tukaj, da sem anded "A" s. 175 00:15:29,980 --> 00:15:35,600 Ali vsi videli? To je precej pogosta, kot takrat, ko želite ugotoviti, 176 00:15:35,600 --> 00:15:40,740 za poznejše stvari, ki bi jih lahko videli, če želimo, da vidim, če - 177 00:15:40,740 --> 00:15:44,710 ali pa želimo vse, vsak bit nastavljeno, razen za 1 178 00:15:44,710 --> 00:15:47,910 ste nagnjeni k ne ~ na vajetih, da ne bomo želite določeno. 179 00:15:47,910 --> 00:15:53,090 Torej si ne želimo, da 32 bitni niz, tako da nam ~ od 32. 180 00:15:53,090 --> 00:15:57,790 Ok. Tako lahko uporabimo vse, tukaj. 181 00:15:57,790 --> 00:16:03,000 V redu, v redu, če ne boste storili, se bomo počasi hodi več skupaj, 182 00:16:03,000 --> 00:16:11,870 ali hojo nad tem, da - skozi to. Sprehodite se skozi to. 183 00:16:11,870 --> 00:16:20,790 Torej, imamo niz, in želimo, da zanke nad vsakim znakom v tem nizu in narediti nekaj za to. 184 00:16:20,790 --> 00:16:26,710 Torej, kako bomo zanke v nizu? Kaj naj uporabimo? 185 00:16:26,710 --> 00:16:30,980 Ne bom, da to storite tukaj. Ja. 186 00:16:30,980 --> 00:16:42,940 Torej imam iterator, in mu je rekel, ampak kako naj vem, koliko znakov v nizu? 187 00:16:42,940 --> 00:16:47,030 Strlen (e), nato pa sem + +. 188 00:16:47,030 --> 00:16:49,860 Torej, kaj sem naredil tukaj ni najboljši način stvari. 189 00:16:49,860 --> 00:16:51,860 Ali kdo ve zakaj? 190 00:16:51,860 --> 00:16:55,290 Ker ste preverjanje jezik niza vsak čas. 191 00:16:55,290 --> 00:17:06,859 Torej se bomo, da želite premakniti strlen, bi lahko rekel sem, int dolžina = strlen (e), 192 00:17:06,859 --> 00:17:11,900 in se nato i 00:17:20,410 Jaz bi tudi naredil int i = 0, dolžina = strlen (e). 194 00:17:20,410 --> 00:17:25,010 In tako se je nekoliko bolje, saj zdaj sem se omejila obseg 195 00:17:25,010 --> 00:17:29,150 za različno dolga, da le ta "za" zanko, namesto da bi jo pred razglasitvi 196 00:17:29,150 --> 00:17:34,990 in da vedno obstaja, in v primeru, da niste ujeli, zakaj je to slabo, 197 00:17:34,990 --> 00:17:39,410 ali zakaj je bil prvotni slabo, it's - začeti izvajati v zanki. 198 00:17:39,410 --> 00:17:43,380 Preveril sem stanje. Je i 00:17:46,790 Torej, koliko sekund, kaj je delati z "zdravo" ves čas. 200 00:17:46,790 --> 00:17:49,670 Torej dolžina ih, h-e-l-l-o. Dolžina je 5. 201 00:17:49,670 --> 00:17:57,580 Torej, i = 0, dolžina je 5, tako da i ni <5, tako da se zanka nadaljuje. 202 00:17:57,580 --> 00:18:02,750 Potem pa smo spet tam. Mi preverite stanje. Je i 00:18:08,390 Torej, poglejmo, koliko zdravo. H-e-l-l-o. To je 5, i ni <5, zato smo še enkrat. 204 00:18:08,390 --> 00:18:13,330 Tako smo izračun, smo se pozdravi štetje, za vsako ponovitev zanke, 205 00:18:13,330 --> 00:18:17,380 celo mislili, da ne bo nikoli spremeniti, da se bo vedno 5. 206 00:18:17,380 --> 00:18:22,530 Zato smo se samo spomnite 5 spredaj in zdaj je vse bolje. 207 00:18:22,530 --> 00:18:24,990 Torej ponavljanjem v celotnem nizu. 208 00:18:24,990 --> 00:18:31,470 Kaj želimo narediti za vsak znak niza? 209 00:18:31,470 --> 00:18:38,510 [Student povedano, nerazumljiv] 210 00:18:38,510 --> 00:18:47,000 Ja. Torej, če je znak, ki niso po abecedi, potem pa samo želim, da jih preskočite. 211 00:18:47,000 --> 00:18:52,300 Ker smo samo skrbi črkah abecede, ne moremo izkoristiti številko. 212 00:18:52,300 --> 00:19:10,850 Torej, kako lahko to storimo? Torej, naš pogoj, da če hočemo kaj - preverite, če je po abecedi. 213 00:19:10,850 --> 00:19:14,060 Torej, kako bomo to preverili? 214 00:19:14,060 --> 00:19:18,720 [Študent] Saj lahko uporabiš funkcijo je alfa. 215 00:19:18,720 --> 00:19:23,160 Je to vključeno v eno od teh, ali so, kot char.h, ali kaj? 216 00:19:23,160 --> 00:19:32,710 Nikar ne uporabljajte je alfa funkcija in uporaba izrecno -, da smo s [i], 217 00:19:32,710 --> 00:19:40,460 da je 8. značaj sekund, se spomnite, da niz je niz znakov, 218 00:19:40,460 --> 00:19:43,180 Tako 8. značaj je. 219 00:19:43,180 --> 00:19:49,280 Zdaj, če je črka, vemo, da mora biti v določenem območju. 220 00:19:49,280 --> 00:19:54,370 In kaj je to območje? 221 00:19:54,370 --> 00:20:07,860 Ja. Torej, če je [i] je ≥ 65 in s [i] ≤ 90, je, kaj naj storim namesto tega? 222 00:20:07,860 --> 00:20:18,470 Ja. Torej si absolutno ne bi smela nikoli tudi ni treba vedeti ASCII vrednosti vsega doslej. 223 00:20:18,470 --> 00:20:25,640 Nikoli ne mislim številk 65, 90, 97 in 102, ali karkoli že je. 224 00:20:25,640 --> 00:20:32,470 Vi ne potrebujete - 112 - vam ni treba vedeti, tisti sploh. To je narobe preveč. 225 00:20:32,470 --> 00:20:41,940 Uporabljajte samo eno quote znakov, posamezne konstante citiram. Torej "A" in manj kot 90, "Z." 226 00:20:41,940 --> 00:20:47,930 In to je bistveno bolje - ne vem off vrhu moje glave, ki je 90 Ž. 227 00:20:47,930 --> 00:20:52,690 Vem off vrhu moje glave, da je "Z" je kapital Z. 228 00:20:52,690 --> 00:21:02,100 Tako dolgo, kot je to v razponu od kapitala v kapitalske Ž, ali pa lahko preverite malimi črkami, 229 00:21:02,100 --> 00:21:17,010 Ali pa, če je to v območju ≥ "a" in ≤ z. 230 00:21:17,010 --> 00:21:19,010 Tako, da je naše stanje. 231 00:21:19,010 --> 00:21:22,520 Slog, kam dati te stvari spreminjajo. 232 00:21:22,520 --> 00:21:29,520 Jaz bom to naredil takole. 233 00:21:29,520 --> 00:21:31,520 Zdaj, kaj želimo storiti? 234 00:21:31,520 --> 00:21:39,530 Vemo, da to pismo je znak, črka abecede. 235 00:21:39,530 --> 00:21:46,270 Zato moramo izbirate med tem, ali bi to zdaj črka ali male črke. 236 00:21:46,270 --> 00:21:48,820 Kako bomo spremljali katero si želimo, da bi bilo? 237 00:21:48,820 --> 00:21:55,520 [Študentski glasovi, nerazumljivi] 238 00:21:55,520 --> 00:21:59,150 Torej, ja, ampak naj preverim. 239 00:21:59,150 --> 00:22:04,910 Modul 0-2 je dejal, je predlog vrgli ven, in s tem se strinjam. 240 00:22:04,910 --> 00:22:11,780 Razen obvestila, da je, kot je - se to dogaja? Ja. 241 00:22:11,780 --> 00:22:18,270 To je vse drugo, ampak ne moremo modul 2, i ali i mod 2, saj 242 00:22:18,270 --> 00:22:22,950 opazili, da je E kapital in "a" male? Ampak tam je prostor, jih ločite? 243 00:22:22,950 --> 00:22:27,150 Tako da boš isti mod 2, ampak oni so različni primeri. 244 00:22:27,150 --> 00:22:29,150 [Student vprašanje, nerazumljiv] 245 00:22:29,150 --> 00:22:34,690 Ja. Tako smo šele tekoč, da štetje. 246 00:22:34,690 --> 00:22:38,730 Mi lahko storite tudi, da je tukaj, če želimo, da bi dobili malo upočasnila 247 00:22:38,730 --> 00:22:41,300 v zanki za izjave, bom dal gor. 248 00:22:41,300 --> 00:22:48,840 Torej, int count = 0 začne pri. 249 00:22:48,840 --> 00:22:54,070 In zdaj, bom prešteti, koliko črki, ki smo jih imeli. 250 00:22:54,070 --> 00:22:59,550 Torej bomo neizbežno, da računajo + +, saj smo našli še eno črko. 251 00:22:59,550 --> 00:23:09,130 Ampak, zdaj praviš, če štetja mod 2. 252 00:23:09,130 --> 00:23:12,590 Pa kaj, če Število mod 2? Oh. Jaz bom == 0 za zdaj. 253 00:23:12,590 --> 00:23:21,740 Prav tako bomo iti čez to. Torej, če Število mod 2 == 0, kaj pa potem? 254 00:23:21,740 --> 00:23:27,830 [Študentje odgovarjajo, nerazumljivi] 255 00:23:27,830 --> 00:23:32,750 Zato želimo, da končajo velike črke. 256 00:23:32,750 --> 00:23:37,520 Obstajajo primeri, 2, velikimi in malimi črkami sta 2 primera. 257 00:23:37,520 --> 00:23:40,990 Torej, če smo z malimi črkami moramo, da bi bilo veliko začetnico. 258 00:23:40,990 --> 00:23:43,710 Če je velika črka nam ni treba storiti ničesar. 259 00:23:43,710 --> 00:23:50,760 Ampak, ali obstaja način - shouldn't so zrcaljeno - 260 00:23:50,760 --> 00:23:54,800 da sploh ne potrebujete, da preverite, ali je to velike ali male? 261 00:23:54,800 --> 00:24:02,240 Kaj lahko storimo, da vedno poskrbite, da smo na koncu vedno v velikimi črkami? 262 00:24:02,240 --> 00:24:07,830 Torej, opazil, kaj smo naredili za male črke "a", kaj pa če smo to točno isto stvar z veliko začetnico? 263 00:24:07,830 --> 00:24:11,900 Ali veliko začetnico spremembe, ali pa je vrednost spremembe? 264 00:24:11,900 --> 00:24:23,100 Ja. Torej, vsaka črka bitni anded s ~ 32 se bo, da je isti lik velike črke 265 00:24:23,100 --> 00:24:29,220 ker za vsak veliki znak je 32. bit ni določen. 266 00:24:29,220 --> 00:24:40,920 Torej, če želite, da bi znak s [i], želimo, da postane male ali velike črke. 267 00:24:40,920 --> 00:24:46,890 Torej, če je bil male, je zdaj velika črka, če je bila velika črka, je še vedno velika črka, in to je to. 268 00:24:46,890 --> 00:24:54,290 Rekel sem, da je to v supersection: Uporabite lahko 32, če hočeš, ampak jaz ponavadi raje delaš "A" -, 269 00:24:54,290 --> 00:25:01,150 namesto samo navaden 32, saj je lahko katera koli druga bit. 270 00:25:01,150 --> 00:25:03,610 Po 32 bit, je lahko katera koli od njih, ali pa ne bi imela dovolj 271 00:25:03,610 --> 00:25:05,840 Številke za zastopanje vseh znakov. 272 00:25:05,840 --> 00:25:09,110 Torej, če dobiš 32 bit, lahko pomeni tudi 64 bitov, bi lahko postal 128-bitno. 273 00:25:09,110 --> 00:25:13,990 Vsak od teh bitov je lahko bit, da razlikuje med velikimi in malimi črkami. 274 00:25:13,990 --> 00:25:18,350 Jaz ne bi bilo treba vedeti, da je 32-bitna. 275 00:25:18,350 --> 00:25:27,130 Lahko uporabite to 'a' -, da bi dobili nekaj, ki se razlikuje med dvema 276 00:25:27,130 --> 00:25:33,000 ne da bi morali zanašati na čarobno številko, ki je 32. 277 00:25:33,000 --> 00:25:38,770 In zdaj, sicer šteje bilo čudno, in kaj hočem narediti? 278 00:25:38,770 --> 00:25:43,920 [Študentski odgovori, nerazumljiv] 279 00:25:43,920 --> 00:25:45,920 [Študent] Kaj je to? 280 00:25:45,920 --> 00:25:49,850 Jaz bom to naredil v 1 sekundi. 281 00:25:49,850 --> 00:25:55,690 Torej, zdaj, če hočem - hočem prepričati znak je zdaj male, 282 00:25:55,690 --> 00:26:04,140 in tako sem lahko ali 32 in 32 pomeni "" - A. 283 00:26:04,140 --> 00:26:06,510 Ampak obvestilo, ki ga isti obrazložitvi kot prejšnja, da če 284 00:26:06,510 --> 00:26:11,670 pismo je bilo že male, nato pa oring z 32 le ohranja male črke. 285 00:26:11,670 --> 00:26:16,220 To se ni spremenilo prvotni značaj. 286 00:26:16,220 --> 00:26:19,910 Ampak zdaj nimam, da bi se izognili rekel: "Če je malih, pozabi na to, 287 00:26:19,910 --> 00:26:23,650 če je velika črka, nato pa ga spremeni. " 288 00:26:23,650 --> 00:26:26,900 To je veliko bolj primeren za to. 289 00:26:26,900 --> 00:26:33,190 [Študent], bi ta strategija odšteje velike črke z malimi dela, če ne bi bilo 32? 290 00:26:33,190 --> 00:26:35,330 Če bi bil, recimo, 34 ali kaj podobnega? 291 00:26:35,330 --> 00:26:41,840 Torej, morate vedeti, da je razlika med 2 je -? >> 1 bit. 292 00:26:41,840 --> 00:26:49,840 Lahko bi bilo več kot 1 bit, dokler vse bitov pod to postavko so enaki. 293 00:26:49,840 --> 00:26:58,500 Zato moramo vsaj 26 znakov - ali je 26 znakov. 294 00:26:58,500 --> 00:27:04,590 Zato moramo vsaj 26 številk predstavlja razliko - 295 00:27:04,590 --> 00:27:07,650 Razlika med in "a" mora biti vsaj 26, 296 00:27:07,650 --> 00:27:10,760 ali pa si ne bi predstavljal vse kapitalske številke. 297 00:27:10,760 --> 00:27:18,630 To pomeni, da, če bomo začeli na 1, da se bo uporaba vseh teh bitov, 298 00:27:18,630 --> 00:27:23,900 vseh teh prvih 5 bitov, ki zastopa vse do Z. 299 00:27:23,900 --> 00:27:32,170 Zato je naslednji bit, ali je to malo, naslednji bit je tista, ki je odločila, da razlikovanje med in "." 300 00:27:32,170 --> 00:27:40,930 To je tudi razlog, v ASCII tabeli, je 5 simboli ločijo velike črke od malimi črkami. 301 00:27:40,930 --> 00:27:49,050 Ker so to simboli, dodatni 5, ki prikliče v 32 pa je razlika med njima. 302 00:27:49,050 --> 00:27:51,840 [Študent] Torej bi lahko to naredil, ker je ASCII zasnovan na tak način. 303 00:27:51,840 --> 00:27:57,280 Da. Ampak ASCII - razlika je lahko tudi oba bitov. 304 00:27:57,280 --> 00:28:12,040 Všeč mi je, če so bili 10000001, in "a" je 11100001 - Pozabil sem, karkoli. 305 00:28:12,040 --> 00:28:18,100 Ampak, če bi bilo tako, potem bi lahko še vedno uporabljajo "A" - A. 306 00:28:18,100 --> 00:28:22,650 To je samo zdaj je razlika med A in "projekt" še ti 2 bitov. 307 00:28:22,650 --> 00:28:32,240 Mislim, da je napisal 48. Ali je 32 + 64? Mislim, da je? 308 00:28:32,240 --> 00:28:40,160 To bi bila še vedno 2 bitov, vsak znak, recimo, Z in Z, K in K 309 00:28:40,160 --> 00:28:45,160 so še vedno enake točno določene nastavke, razen za tiste 2 bitov. 310 00:28:45,160 --> 00:28:48,870 Tako dolgo, kot je to vedno drži, ne glede na to, če ste z uporabo ASCII ali kakšen drug sistem, 311 00:28:48,870 --> 00:28:53,050 tako dolgo, kot da je samo niz število bitov, ki so različni za vsak znak, 312 00:28:53,050 --> 00:28:55,050 torej, da deluje v redu. 313 00:28:55,050 --> 00:29:06,110 To je samo, da je bil 32 ustanovljen zato, ker je prva smo lahko morebiti uporabite. >> Kul. 314 00:29:06,110 --> 00:29:14,520 Jaz ponavadi raje, v primeru, da še niste videli, če je blok je le ena vrstica, 315 00:29:14,520 --> 00:29:24,280 lahko znebiti zavite oklepaje, zato sem ponavadi raje to. 316 00:29:24,280 --> 00:29:34,010 Prav tako boste vedeli, kako lahko naredimo stvari, kot je s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 To lahko storite tudi s [i] = 32 bitni IN. 318 00:29:41,090 --> 00:29:46,400 In bitni ALI = 32. 319 00:29:46,400 --> 00:29:51,490 Poleg tega računajo mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Torej, ne pozabite, da je - ne bom napisal - vsaka vrednost pa je res, da je 0 false. 321 00:30:00,900 --> 00:30:07,880 Torej, "če Število mod 2 == 0", je isto, kot pravi, "če ne upoštevajo mod 2." 322 00:30:07,880 --> 00:30:11,580 Jaz bi verjetno le obrnil linij in rekel, "če Število mod 2, 323 00:30:11,580 --> 00:30:15,350 storite ALI 1, sicer pa AND 1 ", tako da mi ni bilo treba" ne ". 324 00:30:15,350 --> 00:30:18,650 Ampak to deluje prav tako dobro. 325 00:30:18,650 --> 00:30:25,660 In kaj še lahko naredim tukaj? 326 00:30:25,660 --> 00:30:29,060 Lahko jih združimo z ternarni, če si hotel, potem pa, da bi samo, da se stvari umazani 327 00:30:29,060 --> 00:30:33,770 in verjetno bolj težko prebrati, tako da ne bomo storili. 328 00:30:33,770 --> 00:30:37,330 Vsakdo ima kakšne druge predloge? 329 00:30:37,330 --> 00:30:41,580 Je to vse težave prosil za? Oh ja. 330 00:30:41,580 --> 00:30:51,070 Torej, da se znebite teh praznih vrstic, zdaj bomo natisniti f% s čemer eden za godala, 331 00:30:51,070 --> 00:30:56,620 Mi bo izpisal f, S. 332 00:30:56,620 --> 00:30:59,330 Zdaj pa jo vodijo. Sem naredil kaj narobe? 333 00:30:59,330 --> 00:31:03,200 To je \ "Hočem n. 334 00:31:03,200 --> 00:31:07,840 Ok. Zdaj ga bomo teči. To bo verjetno kričati name. 335 00:31:07,840 --> 00:31:11,250 Strlen v string.h. 336 00:31:11,250 --> 00:31:14,290 Torej, to je lepo stvar o Jek je tisto, kar vam pove, da je v, 337 00:31:14,290 --> 00:31:19,140 Namesto GCC, ki samo pravi: "Hej, pozabil si nekaj, ne vem, kaj je bilo." 338 00:31:19,140 --> 00:31:29,220 Vendar bo to povej mi, "si mislil, da so string.h." 339 00:31:29,220 --> 00:31:32,130 Torej, nisem prosil za nič, tako da ne pove ničesar. 340 00:31:32,130 --> 00:31:42,540 Toda potrudili se bomo njihovemu zgledu, "se zahvaljuje 4 dodatka". 341 00:31:42,540 --> 00:31:47,880 To izgleda v redu. Hura. 342 00:31:47,880 --> 00:31:52,370 Torej se vračajo v vaš glavni, skoraj nikoli naredil. 343 00:31:52,370 --> 00:31:57,110 To je neobvezno. In glavna funkcija je edini, za katerega je obvezna. 344 00:31:57,110 --> 00:32:07,140 Če ne vrne nič od glavnega, to je domneva, da si mislil, da se vrnete 0. 345 00:32:07,140 --> 00:32:13,070 Vprašanja? 346 00:32:13,070 --> 00:32:20,980 Ok. Torej, zdaj druga težava. 347 00:32:20,980 --> 00:32:24,810 "Recall od drugega tedna 2 v predavanju, ki swapping 2 spremenljivk" vrednote, ki jih uspešno 348 00:32:24,810 --> 00:32:30,780 te spremenljivke 2 do funkcije (čeprav se imenuje swap) ne deluje ravno, vsaj ne brez "kazalca." 349 00:32:30,780 --> 00:32:37,020 In prezreti nasvetov dokler ne pridemo do njih. 350 00:32:37,020 --> 00:32:40,070 Želimo, da bi zamenjali 2 spremenljivk, ne bomo s funkcijo, da to storite. 351 00:32:40,070 --> 00:32:43,410 Še vedno se dogaja, da to storite v glavnem tako kot piše. 352 00:32:43,410 --> 00:32:48,360 Vendar pa uporaba teh 2 spremenljivk, ne želimo uporabljati začasno spremenljivko. 353 00:32:48,360 --> 00:32:50,770 Obstajata 2 načina, da to storijo. 354 00:32:50,770 --> 00:32:56,310 To lahko storite z uporabo svoje tradicionalne binarne subjekti. 355 00:32:56,310 --> 00:33:00,180 Torej, ali kdo ve, hiter in umazan način, kako to? 356 00:33:00,180 --> 00:33:07,650 To bi dejansko lahko traja nekaj minut razmišljanja. Če imam - 357 00:33:07,650 --> 00:33:12,130 Bom nastavil problem gor, kot da vprašaš. Torej, če imam 2 spremenljivk, ki je pravkar celo 358 00:33:12,130 --> 00:33:17,800 da so mi dali, B vsota spremenljivka, ki je še celo, da sem jaz dati. 359 00:33:17,800 --> 00:33:22,700 Torej, če imam teh 2 spremenljivk, zdaj želim, da jih swap. 360 00:33:22,700 --> 00:33:31,550 Tradicionalni, z uporabo svoje redne binarnih subjektov, mislim, tako kot +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ni bitni subjekti, ki delujejo na binarni. 362 00:33:36,630 --> 00:33:39,600 Torej z -, +, ÷ in vsi, ki. 363 00:33:39,600 --> 00:33:52,980 Lahko bi zamenjal s tem, nekaj podobnega = a + b in b = a - b, a = - b. 364 00:33:52,980 --> 00:34:04,260 Torej, sanity preverite, nato pa bomo videli, zakaj to deluje. 365 00:34:04,260 --> 00:34:13,320 Recimo = 7, b = 3, potem a + b se bo 10. 366 00:34:13,320 --> 00:34:18,820 Torej smo zdaj določitvi = 10, nato pa delamo b = a - b. 367 00:34:18,820 --> 00:34:30,250 Tako delamo b = a - b, ki se bo 7. in b = a - b spet, 368 00:34:30,250 --> 00:34:38,650 ali = a - b. Ki se bo 10-7, ki je 3. 369 00:34:38,650 --> 00:34:44,850 Torej, zdaj, pravilno, "" je bil 7, b je bil 3, in zdaj je 7 in b "a" 3. 370 00:34:44,850 --> 00:34:48,679 Tako, da nekako smiselno, "" je kombinacija med 2 številk. 371 00:34:48,679 --> 00:34:53,000 Na tej točki, "" je kombinacija, nato pa smo se odšteje od izvirne b, 372 00:34:53,000 --> 00:34:56,860 in potem smo se odšteje, kaj je bil prvotni '. " 373 00:34:56,860 --> 00:35:01,150 Ampak to ne deluje pri vseh številkah. 374 00:35:01,150 --> 00:35:08,880 Da bi videli, kaj menijo, da sistem, tako da smo ponavadi mislijo števil kot 32 bitov. 375 00:35:08,880 --> 00:35:13,050 Oglejmo si nekaj, kar je samo kot 4 bitov. 376 00:35:13,050 --> 00:35:15,450 Upam, da sem prišel do dober primer zdaj. 377 00:35:15,450 --> 00:35:18,680 Torej, vem, to bo enostavno. 378 00:35:18,680 --> 00:35:26,720 Recimo, da naši 2 številke 1111 in 1111, tako da smo v binarni zdaj. 379 00:35:26,720 --> 00:35:34,630 V dejanskih decimalk, če želite, da razmišljajo o tem, da način, = 15 in b = 15. 380 00:35:34,630 --> 00:35:37,630 In tako smo pričakovali, ko smo jih swap - niti ne morajo biti enake številke, 381 00:35:37,630 --> 00:35:41,140 vendar sem na ta način. 382 00:35:41,140 --> 00:35:47,100 Dajmo jih, da ni enake številke. Naredimo 1111 in 0001. 383 00:35:47,100 --> 00:35:51,860 Torej = 15 in b = 1. 384 00:35:51,860 --> 00:35:57,670 Ko smo jih zamenjali, pričakujemo, da bo "a", da je 1 in b, da je 15. 385 00:35:57,670 --> 00:36:01,780 Torej, naš prvi korak = a + b. 386 00:36:01,780 --> 00:36:08,770 Naše številke so le 4 bitov široko, tako da "," ki je 1111, + b, ki je 0001, 387 00:36:08,770 --> 00:36:16,780 se bo končalo 10.000, vendar imamo samo 4 bitov. 388 00:36:16,780 --> 00:36:22,540 Torej, zdaj = 0. 389 00:36:22,540 --> 00:36:34,080 In zdaj smo želeli določiti b = a - b - pravzaprav je to še vedno izšlo odlično. 390 00:36:34,080 --> 00:36:39,630 = - b - poglejmo, če to deluje odlično. 391 00:36:39,630 --> 00:36:53,720 Torej b = 0 - 1, ki bi bila še vedno 15 in nato = - b, kar bi bilo 1. 392 00:36:53,720 --> 00:36:56,210 Mogoče to ne dela. 393 00:36:56,210 --> 00:36:59,020 Počutim se kot, da je razlog, da ne dela z rednim. 394 00:36:59,020 --> 00:37:06,400 Ok, tako da deluje na predpostavki, da ne bo delovalo z rednim poslovanjem binarne, 395 00:37:06,400 --> 00:37:15,040 in bo iščem - bom Googlu, da vidim, če je to res. 396 00:37:15,040 --> 00:37:23,490 Zato želimo, da to storite z uporabo bitni izvajalcem, in tukaj je namig XOR. 397 00:37:23,490 --> 00:37:28,780 Torej, uvajanje XOR (^), če še niste videli. 398 00:37:28,780 --> 00:37:34,610 To je, še enkrat, upravljavec bitni, tako da deluje malo po malo, in it's - 399 00:37:34,610 --> 00:37:39,910 Če imate bita 0 in 1, potem bo to 1. 400 00:37:39,910 --> 00:37:45,230 Če imate bitov 1 in 0, bo to 1, imate bita 0 in 0, da bo 0, 401 00:37:45,230 --> 00:37:47,640 in če imate bitov 1 in 1 bo pa 0. 402 00:37:47,640 --> 00:37:56,180 Torej je všeč ali ne. Če katera izmed bit res, to je 1, vendar za razliko ali pa ne more biti tako bitov, ki so res. 403 00:37:56,180 --> 00:37:59,320 Ali bi bilo to 1, bi morali to XOR 0. 404 00:37:59,320 --> 00:38:02,250 Torej bomo želeli uporabljati XOR tukaj. 405 00:38:02,250 --> 00:38:09,960 Pomislite za trenutek, grem na Google. 406 00:38:09,960 --> 00:38:16,230 No, ne moreš prebrati, da, jaz sem trenutno na swap XOR stran algoritmov. 407 00:38:16,230 --> 00:38:21,340 Upajmo, da bo to razložiti, zakaj sem moreš - 408 00:38:21,340 --> 00:38:34,190 To je točno algoritem, ki smo ga pravkar storil. 409 00:38:34,190 --> 00:38:37,330 Še vedno ne razumem, zakaj - Najbrž sem samo izbral slab zgled, 410 00:38:37,330 --> 00:38:44,940 vendar je to primer, ko "" se je zgodilo, da postane 0, po prihodu na 5 bitov, tako da zdaj "" je 0, 411 00:38:44,940 --> 00:38:48,730 da je tisto, kar se imenuje "integer overflow." 412 00:38:48,730 --> 00:38:54,370 Po Wikipedia, "Za razliko od XOR zamenjave, ta sprememba zahteva, da uporablja nekatere metode 413 00:38:54,370 --> 00:38:59,780 zagotoviti, da x + y ne povzroči celo število prekoračitev. " 414 00:38:59,780 --> 00:39:08,350 Torej, ta pa ima težave, kar je bilo celo preliv, vendar sem naredil kaj narobe. 415 00:39:08,350 --> 00:39:10,520 Nisem prepričan. Jaz bom poskusil priti gor z drugo. 416 00:39:10,520 --> 00:39:13,640 [Študent] No, ni celo do izlitja, ko ste poskušali dati nekaj tam 417 00:39:13,640 --> 00:39:16,640 večji od zneska, ki ste jih dodeljenih bitov? 418 00:39:16,640 --> 00:39:23,730 Ja. Imamo 4 bitov. That - imeli smo 4 bite, nato pa smo poskušali dodamo 1 do njega, tako da smo na koncu z 5 bitov. 419 00:39:23,730 --> 00:39:26,690 Toda 5. bit dobi le prekinil, ja. 420 00:39:26,690 --> 00:39:28,970 To bi lahko dejansko - 421 00:39:28,970 --> 00:39:33,010 [Študent] Ali to vrgel napako, ali pa, da je - da bi vrgel napako? 422 00:39:33,010 --> 00:39:40,720 No torej ni prišlo. Ko prideš do zbirnega ravni, posebno bit 423 00:39:40,720 --> 00:39:47,020 nekje stoji, da je rekel, da je preliv, ampak v C se nekako sploh ne ukvarjajo s tem. 424 00:39:47,020 --> 00:39:55,160 Vi dejansko ne morejo delati z njim, razen če uporabite posebna navodila za sestavljanje, pri C. 425 00:39:55,160 --> 00:39:58,110 Razmislimo o zamenjavi XOR. 426 00:39:58,110 --> 00:40:02,220 In mislim, da je članek Wikipedia bi bili tudi pravi, da - 427 00:40:02,220 --> 00:40:07,310 Tako je tudi pripeljal modularne aritmetike, zato mislim, da sem bil v teoriji tem modularne aritmetike 428 00:40:07,310 --> 00:40:11,160 Ko sem rekel, da 0-1 je 15 še enkrat. 429 00:40:11,160 --> 00:40:15,410 Tako, da bi lahko dejansko - na redni procesor, ki počne 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Ker smo na koncu na 0, odštejemo 1, tako da potem to ovije okoli 1111 nazaj. 431 00:40:20,430 --> 00:40:28,930 Torej bi to algoritem dejansko delajo, je a + b, je a - b, b -, da bi bilo v redu. 432 00:40:28,930 --> 00:40:34,030 Vendar pa obstaja nekaj predelovalcev, ki ne naredi, da zato ne bi bilo v redu, v teh posebnih narave. 433 00:40:34,030 --> 00:40:39,880 XOR swap deluje v vseh procesorjih. Ok. 434 00:40:39,880 --> 00:40:42,280 Ideja je, da je moral biti enak, čeprav. 435 00:40:42,280 --> 00:40:50,120 Če smo z uporabo XOR nekako dobiti informacije tako v 1 spremenljivk, 436 00:40:50,120 --> 00:40:54,120 in ga nato izvlecite informacije o posameznih spremenljivk znova. 437 00:40:54,120 --> 00:41:04,330 Torej, ali ima kdo ideje / odgovor? 438 00:41:04,330 --> 00:41:14,540 [Student odgovor, nerazumljiv] 439 00:41:14,540 --> 00:41:22,220 Torej bi to delovalo, pa tudi, XOR je komutativna. 440 00:41:22,220 --> 00:41:27,620 Ne glede na to, da so ti, ki 2 številki zgodi, da tu gor, 441 00:41:27,620 --> 00:41:30,100 Ta rezultat bo enak. 442 00:41:30,100 --> 00:41:35,800 Tako ^ ^ b je b. 443 00:41:35,800 --> 00:41:51,860 Morda boste prav tako videli to zapišemo kot ^ = b, b ^ =, ^ = b znova. 444 00:41:51,860 --> 00:42:00,200 Torej, to je v redu, in razumeti, zakaj to deluje, mislim bitov. 445 00:42:00,200 --> 00:42:10,400 Uporaba drobna številko, recimo 11001 in 01100. 446 00:42:10,400 --> 00:42:12,790 Torej, to je "a", to je b. 447 00:42:12,790 --> 00:42:15,540 Tako ^ = b. 448 00:42:15,540 --> 00:42:22,380 Bomo lahko o "A" = na ekskluzivni teh 2 stvari. 449 00:42:22,380 --> 00:42:32,920 Torej 1 ^ 0 je 1, 1 ^ 1 je 0, 0 ^ 1 je 1, in 0 ^ 0 je 0, 1 ^ 0 je 1. 450 00:42:32,920 --> 00:42:37,380 Torej ',' če pogledaš na decimalno številko, da se bo - 451 00:42:37,380 --> 00:42:41,160 ne boste videti veliko razmerje med prvotno "A" in "novem" 452 00:42:41,160 --> 00:42:45,600 ampak gledamo na koščke, "" je zdaj kot mrežo podatkov 453 00:42:45,600 --> 00:42:49,970 tako izvirnega "a" in prvotne b. 454 00:42:49,970 --> 00:42:57,930 Torej, če vzamemo b ^ vidimo, da bomo na koncu na original '. " 455 00:42:57,930 --> 00:43:08,910 In če vzamemo original "'^ novo", "bomo videli bomo končali v prvotni b. 456 00:43:08,910 --> 00:43:18,380 Torej, (b ^) ^ b = izvirnik "." 457 00:43:18,380 --> 00:43:27,910 In (b ^) ^ = prvotna b. 458 00:43:27,910 --> 00:43:37,010 Tu je - še en način gledanja je to kaj LOL sam je vedno 0. 459 00:43:37,010 --> 00:43:45,020 Torej, 1101 ^ 1101, vse bitov se bodo enaki. 460 00:43:45,020 --> 00:43:47,920 Torej se ne bo nikoli, kadar je 1 0, drugi pa 1. 461 00:43:47,920 --> 00:43:51,080 Torej, to je 0000. 462 00:43:51,080 --> 00:43:57,240 Enako s tem. (^ B) ^ b je kot ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) se bo 0, 0 ^ je le, da bo treba "," saj so vsi deli so 0. 464 00:44:03,680 --> 00:44:08,050 Torej, edini, ki se bodo, če "" je bila prvotno 1 - imel narave. 465 00:44:08,050 --> 00:44:12,070 In ista ideja tukaj, sem prepričan, da je tudi komutativna. 466 00:44:12,070 --> 00:44:17,590 Ja. Nisem rekel, da je bilo pred komutativna. 467 00:44:17,590 --> 00:44:24,680 The ^ "," in to je asociativna, tako da zdaj (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 In lahko naredimo b ^ (^). 469 00:44:28,970 --> 00:44:31,540 In tako spet dobimo prvotno b. 470 00:44:31,540 --> 00:44:37,120 Torej, "" Zdaj je kombinacija A 'in B skupaj. 471 00:44:37,120 --> 00:44:49,660 Z našo novo combo "" rečemo, b = combo "'^ prvotna b, smo dobili original'." 472 00:44:49,660 --> 00:45:05,170 In zdaj combo = "'^ nov b, ki je bil original - ali se je zdaj, kaj je" a "ali b. 473 00:45:05,170 --> 00:45:13,620 To je v tem primeru tukaj. To je = b, stara b. 474 00:45:13,620 --> 00:45:16,550 Torej, zdaj je vse spet v zamenjali vrstnem redu. 475 00:45:16,550 --> 00:45:22,960 Če smo dejansko pogledal bitov, b = b ^, se dogaja, da te XOR 2, 476 00:45:22,960 --> 00:45:33,920 in odgovor se bo to in potem = ^ b je XORing te 2 in odgovor je to. 477 00:45:33,920 --> 00:45:41,090 Vprašanja? Ok. Torej, zadnja je nekoliko bistveno težje. 478 00:45:41,090 --> 00:45:43,180 [Študent] Mislim, da je vprašanje o tem. >> Oh, oprostite. 479 00:45:43,180 --> 00:45:49,380 [Študent] Kaj je pravzaprav hitreje? Če uporabljate to XOR, ali je to, če ugotovi novo spremenljivko? 480 00:45:49,380 --> 00:45:55,190 Torej, kaj je dejansko hitreje, razglasi novo spremenljivko ali z uporabo XOR, da bi zamenjali? 481 00:45:55,190 --> 00:45:59,600 Odgovor je, po vsej verjetnosti začasno spremenljivko. 482 00:45:59,600 --> 00:46:05,780 In to je zato, ker ko je bilo zbrati navzdol - tako na skupščini ravni, 483 00:46:05,780 --> 00:46:12,320 ni taka stvar kot lokalne spremenljivke ali kakršnih koli začasnih spremenljivk ali kateri koli od teh stvari. 484 00:46:12,320 --> 00:46:16,060 Ti si kot - tam je spomin, in so registri. 485 00:46:16,060 --> 00:46:20,920 Registri so tam, kjer se stvari aktivno dogaja. 486 00:46:20,920 --> 00:46:24,750 Saj ne dodamo 2 stvari v spomin, dodate 2 stvari v registrih. 487 00:46:24,750 --> 00:46:28,160 In ti bi stvari iz pomnilnika na registrov, nato dodamo, 488 00:46:28,160 --> 00:46:33,180 in potem bi si jih dal nazaj v spomin, ampak se vse dogaja se dogaja v registrih. 489 00:46:33,180 --> 00:46:38,750 Torej, če ste z začasnim spremenljivo pristop, ponavadi kaj se zgodi, 490 00:46:38,750 --> 00:46:42,810 Te številke 2, so že v registrih. 491 00:46:42,810 --> 00:46:46,570 In potem od te točke naprej, ko ste jih zamenjali, 492 00:46:46,570 --> 00:46:51,540 pa bom začela z drugo evidenco. 493 00:46:51,540 --> 00:46:56,510 Kamorkoli je uporabljal b, bo to samo uporabo registra, ki je bil že shranjuje podatke "." 494 00:46:56,510 --> 00:47:02,180 Torej ni treba storiti ničesar, da bi dejansko opraviti zamenjave. Ja? 495 00:47:02,180 --> 00:47:05,690 [Študent] Vendar je prav tako več pomnilnika, kajne? 496 00:47:05,690 --> 00:47:10,280 To bo le več prostora v pomnilniku, če je potrebno shraniti, da se začasno spremenljivko. 497 00:47:10,280 --> 00:47:14,830 Všeč mi je, če pozneje uporabite to začasno spremenljivko spet nekam, 498 00:47:14,830 --> 00:47:18,920 potem pa - ali si določite nekaj za te začasne spremenljivke. 499 00:47:18,920 --> 00:47:24,630 Torej, če na kateri koli točki v času "," b v temp imajo različne vrednosti ali kaj podobnega, 500 00:47:24,630 --> 00:47:30,680 potem se dogaja, da imajo različne lokacije v spominu, vendar je res, da 501 00:47:30,680 --> 00:47:34,800 obstaja veliko lokalnih spremenljivk, ki bo na voljo le v registrih. 502 00:47:34,800 --> 00:47:44,370 V tem primeru, je ni nikoli dal v spomin, zato si ne izgubljamo spomin. 503 00:47:44,370 --> 00:47:58,620 Ok. Zadnje vprašanje je malo več. 504 00:47:58,620 --> 00:48:04,850 Torej, tukaj, v tem CS50 aparata, ki je ni v slovarju. 505 00:48:04,850 --> 00:48:12,390 In razlog za to je, ker [? B66] je črkovalnik, kjer boste lahko pisno 506 00:48:12,390 --> 00:48:15,780 uporabo hash tabele ali poskusov ali nekaterih podatkov strukturo. 507 00:48:15,780 --> 00:48:22,660 Ti boš moral pisati tudi črkovalnik, in boste uporabljali to zbirko za to. 508 00:48:22,660 --> 00:48:28,280 Toda za ta problem, smo se le, da bo pogledati da vidim, če ena beseda v slovarju. 509 00:48:28,280 --> 00:48:31,250 Torej, namesto da shranite celotno zbirko podatkov, v nekaterih strukturi 510 00:48:31,250 --> 00:48:35,180 in potem videti čez celoten dokument, da vidim, če je kaj narobe napisane, 511 00:48:35,180 --> 00:48:38,490 smo samo želim, da bi našli 1 besedo. Tako smo lahko samo skandirati skozi celotno zbirko 512 00:48:38,490 --> 00:48:44,300 in če je ne bomo nikoli našli besedo v celotnem slovarju, potem ne bi bilo tam. 513 00:48:44,300 --> 00:48:52,150 Če smo optično branje po celotnem slovarju in ga videli besedo, potem pa sva dobra, smo ga našli. 514 00:48:52,150 --> 00:48:56,580 Tukaj piše, da si želimo, da začnete iskati na funkcijo file-C je ravnanje, 515 00:48:56,580 --> 00:48:59,930 saj želimo, da se glasi slovar, 516 00:48:59,930 --> 00:49:07,680 ampak bom dal namig tukaj, za katere funkcije, ki jih je treba zamislite. 517 00:49:07,680 --> 00:49:11,510 Jaz jih bom napisal na prostorov. 518 00:49:11,510 --> 00:49:20,490 Tako bo glavni tiste, ki jih želite videti na f se odprejo in potem neizogibno, f zaprta, 519 00:49:20,490 --> 00:49:26,540 , ki bo šel na koncu svojega programa, in f skeniranje f. 520 00:49:26,540 --> 00:49:31,060 Lahko uporabite tudi f brati, vendar pa verjetno ne želite, da 521 00:49:31,060 --> 00:49:34,200 ker je - ne boste na koncu potrebovali. 522 00:49:34,200 --> 00:49:41,880 F skeniranje f je tisto, kar boste uporabljali za skeniranje v slovar. 523 00:49:41,880 --> 00:49:46,370 In tako se vam ni potrebno za kodiranje do rešitev, samo poskusite in tako kot psevdo-kodo svojo pot 524 00:49:46,370 --> 00:50:05,200 do rešitve, in potem bomo o tem razpravljali. 525 00:50:05,200 --> 00:50:14,110 In dejansko, ker sem že dal si ti, če greš v katerem koli terminalu ali vašega aparata lupini, 526 00:50:14,110 --> 00:50:18,250 Jaz bi - sem ponavadi - če še niste videli še, ne vem, če si v razredu, 527 00:50:18,250 --> 00:50:23,490 ampak človek, tako da so strani man, so zelo koristne za ogleduje precej koli funkcijo. 528 00:50:23,490 --> 00:50:27,330 Tako sem lahko naredil, recimo, MAN F, skeniranja f. 529 00:50:27,330 --> 00:50:32,300 To je zdaj info o družini f skeniranja funkcij. 530 00:50:32,300 --> 00:50:37,070 Jaz bi tudi naredil MAN F, odprte in da bomo mi podrobnosti o tem. 531 00:50:37,070 --> 00:50:40,750 Torej, če veste, kaj funkcije, ki jo uporabljate, ali berete kodo 532 00:50:40,750 --> 00:50:43,000 in boste videli nekaj nalog in si kot: "Kaj je to storil?" 533 00:50:43,000 --> 00:50:45,280 Samo človek, ki delujejo ime. 534 00:50:45,280 --> 00:50:47,340 Obstaja nekaj čudnih primerov, kjer boste morda morali reči 535 00:50:47,340 --> 00:50:51,620 všeč. Man 2, ki delujejo ime ali man 3, ki delujejo ime, 536 00:50:51,620 --> 00:50:58,230 ampak imate samo to, da če človek ime funkcije ne zgodi, da dela prvič. 537 00:50:58,230 --> 00:51:03,010 [Študent] Torej sem bral, stran man za odprt, vendar sem še vedno zmeden o tem, kako bo uporabljala in program. 538 00:51:03,010 --> 00:51:06,170 Ok. Veliko priročnikov manj kot v pomoč. 539 00:51:06,170 --> 00:51:08,470 Oni so bolj koristno, če veste, kaj storiti 540 00:51:08,470 --> 00:51:12,670 in potem si morate zapomniti vrstni red argumentov ali kaj podobnega. 541 00:51:12,670 --> 00:51:17,640 Ali lahko dam splošen pregled, vendar so nekateri od njih so zelo prepričljivi. 542 00:51:17,640 --> 00:51:22,220 Kot skeniranja f f, prav tako. To vam daje informacije o vseh teh funkcij, 543 00:51:22,220 --> 00:51:28,120 in 1 linijo tukaj dogaja reči, "F skeniranje f bere iz niza točko ali potoka." 544 00:51:28,120 --> 00:51:32,360 Ampak f odpreti. Torej, kako bi jih uporabljamo f odprta? 545 00:51:32,360 --> 00:51:38,470 Ideja o programu, ki ga potrebuje za to sliko I / O je, da 546 00:51:38,470 --> 00:51:45,070 morate najprej odpreti datoteko, ki jo želite delati stvari, s in neizogibno 547 00:51:45,070 --> 00:51:51,220 prebrati stvari iz te datoteke in ne stvari z njimi. 548 00:51:51,220 --> 00:51:55,350 F odprto je tisto, kar bomo uporabili za odpiranje datoteke. 549 00:51:55,350 --> 00:52:04,190 Kar smo dobili nazaj, kaj datoteka ne želimo odpreti, da nam - 550 00:52:04,190 --> 00:52:11,970 tukaj piše "/ uporabnik / share / narek / besede." 551 00:52:11,970 --> 00:52:16,740 To je datoteka, ki želimo odpreti, in želimo, da bi jo odprli - 552 00:52:16,740 --> 00:52:21,440 moramo jasno določiti, ali želimo odpreti, da boste videli, ali če želimo odpreti za pisanje. 553 00:52:21,440 --> 00:52:26,490 Tukaj je nekaj kombinacij in podobno, vendar želimo odpreti to za branje. 554 00:52:26,490 --> 00:52:29,380 Želimo, da se glasi iz spisa. 555 00:52:29,380 --> 00:52:34,290 Torej, kaj je to vrnitev? Vrne datoteke zvezdico (*), 556 00:52:34,290 --> 00:52:37,260 in jaz sem pokazal vse, kar je v spremenljivko f, tako *, 557 00:52:37,260 --> 00:52:40,840 še enkrat, to je kazalec, vendar ne želimo, da se ukvarjajo s kazalci. 558 00:52:40,840 --> 00:52:46,470 Si lahko zamislite, kot f, f je sedaj spremenljivo boste uporabili za zastopanje datoteko. 559 00:52:46,470 --> 00:52:49,850 Torej, če želite prebrati iz datoteke, lahko bere od f. 560 00:52:49,850 --> 00:52:54,820 Če želite zapreti datoteko, zaprite f. 561 00:52:54,820 --> 00:53:00,350 Tako ob koncu programa, ko smo neizogibno želite zapreti datoteko, kaj naj storimo? 562 00:53:00,350 --> 00:53:06,750 Želimo zapreti f. 563 00:53:06,750 --> 00:53:12,600 Torej, zdaj je zadnja datoteka funkcijo, bomo želite uporabljati optično branje f, f skeniranje f. 564 00:53:12,600 --> 00:53:20,930 In kaj to naredi, je, da skenira v spisu, ki išče vzorec za tekmo. 565 00:53:20,930 --> 00:53:39,100 Če pogledamo na stran človeka tukaj, bomo videli int F F skeniranja, prezreti vrnjeno vrednost za zdaj. 566 00:53:39,100 --> 00:53:45,230 Prvi argument je datoteka * tok, tako da je prvi argument bomo želeli prenesti, je f. 567 00:53:45,230 --> 00:53:47,900 Mi skeniranje več kot f. 568 00:53:47,900 --> 00:53:53,680 Drugi argument je format string. 569 00:53:53,680 --> 00:53:58,310 Dal vam bom oblikovnega niza zdaj. 570 00:53:58,310 --> 00:54:05,180 Mislim, da se zgodi, da recimo, 127s \ n, veliko je to nepotrebno. 571 00:54:05,180 --> 00:54:12,490 Ideja o tem, kaj da je oblikovni niz je lahko si misliš, f skeniranja kot nasprotje f tiskanja. 572 00:54:12,490 --> 00:54:17,160 Torej f tisk, tisk f uporabljamo tudi to vrsto parametra format, 573 00:54:17,160 --> 00:54:25,000 ampak v f tiskanja, kaj delamo, je - poglejmo enakovredno. 574 00:54:25,000 --> 00:54:32,550 Torej tiskanje f, in tam je pravzaprav tudi f natisni f, kjer je prvi argument se bo f. 575 00:54:32,550 --> 00:54:40,980 Ko tiskate f, bi lahko rekli nekaj podobnega, "print 127s \ n" in potem, če se peljemo mu nekaj vrvice, 576 00:54:40,980 --> 00:54:44,050 da se bo natisniti niz in nato v novo vrstico. 577 00:54:44,050 --> 00:54:49,690 Kaj pomeni 127, sem prepričan, vendar nikoli nisem sam omejen na to, 578 00:54:49,690 --> 00:54:52,470 Vi sploh ne bi morali reči, 127 'v tiskani f, 579 00:54:52,470 --> 00:54:57,090 ampak kaj to pomeni izpiši prvih 127 znakov. 580 00:54:57,090 --> 00:54:59,350 Zato sem prepričan, da je tako. Lahko Google za to. 581 00:54:59,350 --> 00:55:03,000 Toda v naslednjem sem skoraj pozitivno, to pomeni, da je. 582 00:55:03,000 --> 00:55:08,880 Torej, to je izpiši prvih 127 znakov, nato pa se v novo vrstico. 583 00:55:08,880 --> 00:55:14,680 F f skeniranje zdaj, namesto da gledaš spremenljivke in tiskanje, 584 00:55:14,680 --> 00:55:22,620 to se dogaja, da pogled na nekatere nizu, in shranite vzorec v spremenljivke. 585 00:55:22,620 --> 00:55:26,360 Naj dejansko uporabo optičnega f v drugem primeru. 586 00:55:26,360 --> 00:55:31,670 Torej, recimo, da smo imeli nekaj int x = 4, 587 00:55:31,670 --> 00:55:41,110 in smo želeli ustvariti niz narejen iz - želela ustvariti niz 588 00:55:41,110 --> 00:55:44,250 da je bila všeč, bo ta prišel veliko kasneje, 589 00:55:44,250 --> 00:55:49,020 nekaj, kar je podobno kot 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Torej je to lahko program, kjer boste imeli kilometrov števec, 591 00:55:51,870 --> 00:55:56,420 Skratka i preprečevanje in želite shraniti kup slik. 592 00:55:56,420 --> 00:56:02,430 Torej želite shraniti i.jpg, kjer sem je nekaj ponovitev vaš zanke. 593 00:56:02,430 --> 00:56:05,500 Torej, kako bi to niz za ta JPEG? 594 00:56:05,500 --> 00:56:11,720 Če ste želeli natisniti 4.jpg, bi lahko samo rečem tiskanja F, d.jpg%, 595 00:56:11,720 --> 00:56:14,410 nato pa jo natisne za to JPEG. 596 00:56:14,410 --> 00:56:20,050 Toda če želimo rešiti niz 4.jpg, bomo uporabili optično f. 597 00:56:20,050 --> 00:56:30,860 Torej niz s - pravzaprav smo moreš - znak, znak je, pojdiva 100. 598 00:56:30,860 --> 00:56:35,400 Zato sem nekaj prijavljeni niz 100 znakov 599 00:56:35,400 --> 00:56:39,830 in to je tisto, kar smo neizbežno, da se shrani, da se noter JPEG 600 00:56:39,830 --> 00:56:47,920 Torej bomo uporabljati optično f, ter obliko, kako bi lahko rekli% d.jpg 601 00:56:47,920 --> 00:56:54,980 za tiskanje 4.jpg v obliki, to se bo d.jpg%. 602 00:56:54,980 --> 00:57:04,020 Torej format% d.jpg, kaj želimo nadomestiti z% d je x, 603 00:57:04,020 --> 00:57:06,590 in zdaj moramo hraniti, da se niz nekje. 604 00:57:06,590 --> 00:57:12,500 In kje bomo za shranjevanje tega niza je matrika s. 605 00:57:12,500 --> 00:57:21,640 Torej po tej liniji kodo, s, če tiskamo f,% s variabilnega s, 606 00:57:21,640 --> 00:57:26,280 da se bo tiskanje 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Torej f skeniranje f je enak kot skeniranja f, razen zdaj je videti v tem spisu 608 00:57:38,930 --> 00:57:43,600 za tisto, za shranjevanje vs. 609 00:57:43,600 --> 00:57:46,160 To je tisto, kar je zadnji argument bo. 610 00:57:46,160 --> 00:57:54,170 Želimo, da za shranjevanje - "Scan f družino funkcij skandiranje tako po obliki kot poskusil spodaj. 611 00:57:54,170 --> 00:58:02,450 Če se kateri je shranjena v lokacijskih točk lahko vrnete - " 612 00:58:02,450 --> 00:58:12,910 Ne bi mi bilo dobro. Naj pomislim za sekundo. 613 00:58:12,910 --> 00:58:26,350 Torej, skeniranje f ne - kaj za vraga je funkcija, ki pa to? 614 00:58:26,350 --> 00:58:31,650 Torej, skeniranje f se ne bo trajalo celo število in ne pika JPG. 615 00:58:31,650 --> 00:58:43,490 To se dogaja, zamrmra []. 616 00:58:43,490 --> 00:58:49,360 Prihranite int spremenljivko niza int C. 617 00:58:49,360 --> 00:58:55,940 Kaj je ta spremenljivka, ali kaj je ta funkcija imenuje? 618 00:58:55,940 --> 00:59:04,950 Da. That - ja. Torej, kaj sem vam pred opredelitev je bila s print f, 619 00:59:04,950 --> 00:59:09,820 ki je - da naredi veliko bolj smiselno, zato sem rekel, da je veliko več kot f tiskanja. 620 00:59:09,820 --> 00:59:14,700 Scan f je še nekako kot f tiska, vendar je tiskanje f bo skeniranje več 621 00:59:14,700 --> 00:59:17,510 in zamenjavo spremenljivke in zdaj ga shranite v nizu. 622 00:59:17,510 --> 00:59:19,620 Namesto da bi ga natisnili, jo shrani v nizu. 623 00:59:19,620 --> 00:59:25,070 Torej prezreti, da je v celoti. Še vedno lahko pomislite določa obliko, kot tako kot pri f tiskanja. 624 00:59:25,070 --> 00:59:34,510 Zdaj, če želimo narediti 4.jpg stvar, bi naredili S tiskanja f, x za to. 625 00:59:34,510 --> 00:59:38,520 Torej, kaj skeniranje f počne - kaj je vaše vprašanje bo? 626 00:59:38,520 --> 00:59:40,820 [Študent] Jaz sem samo zmeden o tem, kaj poskušamo storiti prav tukaj 627 00:59:40,820 --> 00:59:43,450 s tem JPEG. Ali lahko pojasnite, da je 1 več časa? 628 00:59:43,450 --> 00:59:52,710 Torej je to - to je manj relevantna za skeniranje f f sedaj, upajmo, da bo to kravato nazaj v neke vrste način. 629 00:59:52,710 --> 01:00:02,240 Ampak, kaj sem prvotno nameraval pokazati bilo - to je pravzaprav neposredno povezane s temi [? F5] 630 01:00:02,240 --> 01:00:08,520 Vi boste uporabljali S tiskanja f, kjer pravijo, da imamo 100 slik, 631 01:00:08,520 --> 01:00:13,630 in želite prebrati sliko 1.jpg 2.jpg,, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Torej, da bi to storili, morate f odprta, nato pa moraš opraviti v nizu, ki ga želite odpreti. 633 01:00:21,520 --> 01:00:30,020 Zato bi želeli odpreti 1.jpg, da bi ustvarili niz, ki je 1.jpg, 634 01:00:30,020 --> 01:00:37,660 delamo s print f% od d.jpg--nismo naredili za int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Tako je tisk f% d.jpg na i. 637 01:00:51,130 --> 01:00:56,320 Torej po tej progi, zdaj spremenljivka ali polje s bo 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Ali 0.jpg, 1.jpg, 2.jpg. In tako bomo lahko odprli v zameno za vsako sliko za branje. 639 01:01:10,610 --> 01:01:19,550 Tako da je tisto, kar je natisniti f ne. Vidiš, kaj je tiskanje f počne sedaj? 640 01:01:19,550 --> 01:01:25,720 [Študent] Ok, to je ob - ustvari niz, something.jpg in jo shrani. 641 01:01:25,720 --> 01:01:30,360 Da. To ustvarja - to je še en format string, tako kot f skeniranje in tiskanje f, 642 01:01:30,360 --> 01:01:37,530 če jih vnese vse spremenljivke v drugega argumenta, bi bilo v nasprotju s i. 643 01:01:37,530 --> 01:01:42,280 Morda - mislim, da je tako. Toda ne glede na vrstni red argumentov. 644 01:01:42,280 --> 01:01:45,440 To se dogaja, da vstavite vse spremenljivke v obliki niza 645 01:01:45,440 --> 01:01:52,250 in nato shranite v našo buffer, pravimo, da buffer, to je, če smo shranjevanju niz. 646 01:01:52,250 --> 01:02:00,750 Tako smo shranjevanje v notranjosti S. pravilno v formatu niz, saj je bilo% d se nadomesti z 4. 647 01:02:00,750 --> 01:02:08,080 [Študent] Torej, če je to storil, je spremenljivka f le, da bo treba prerazporediti? 648 01:02:08,080 --> 01:02:18,110 Da. Torej bi morali zapreti izvirnik f pred tem. 649 01:02:18,110 --> 01:02:22,810 Toda - in nato tudi, če ni bilo f odprla tukaj, potem bi morali reči - 650 01:02:22,810 --> 01:02:29,280 Ja. Vendar pa bi bilo odpreti 100 različnih datotek. 651 01:02:29,280 --> 01:02:37,360 [Študent] Ampak mi ne bi mogli dostopati ali - v redu. 652 01:02:37,360 --> 01:02:44,230 Ok. Torej, skeniranje f, f skeniranje f, je nekako isto idejo, 653 01:02:44,230 --> 01:02:53,610 toda namesto, namesto da bi jo shranite v nizu, to je več, kot si ti sedaj 654 01:02:53,610 --> 01:03:02,420 gre skozi želo in vzorec ujemanja zoper to vrvico in shranjevanje rezultate v spremenljivke. 655 01:03:02,420 --> 01:03:11,290 Lahko uporabite optično f razčleniti v nekaj podobnega 4.jpg in shranite celo število 4 x vsoto v int. 656 01:03:11,290 --> 01:03:13,430 To je tisto, kar lahko uporabite za optično f. 657 01:03:13,430 --> 01:03:16,300 F f skeniranje bo naredil, da v ukazni vrstici. 658 01:03:16,300 --> 01:03:19,200 Pravzaprav sem prepričan, to je tisto, knjižnica CS50 ne. 659 01:03:19,200 --> 01:03:29,050 Torej, ko ste rekli, "dobili int," je skeniranje f-ing več - scan f je način dobiš vnos uporabnika. 660 01:03:29,050 --> 01:03:34,670 F f skeniranje bo naredil isto stvar, vendar z uporabo datotek za skeniranje končano. 661 01:03:34,670 --> 01:03:41,090 Torej, tukaj smo skeniranje v tej zadevi. 662 01:03:41,090 --> 01:03:45,460 Vzorec smo se trudili nekaj niz, ki je 127 znakov 663 01:03:45,460 --> 01:03:48,100 sledilo novo vrstico 664 01:03:48,100 --> 01:03:54,770 Zato sem prepričan, da bi lahko celo rekel "S tekmo," ker v slovarju 665 01:03:54,770 --> 01:03:57,770 se zgodi, da imajo, smo zagotoviti nobena beseda ni tako dolgo, 666 01:03:57,770 --> 01:04:03,310 in bo tudi skeniranje f f, mislim, ustavimo se na novo progo ni važno kaj. 667 01:04:03,310 --> 01:04:06,970 Ampak bomo tudi novo linijo na tekmi, in - 668 01:04:06,970 --> 01:04:13,960 [Študent] Če nismo vključili novo linijo, ne bi našli dele besedo? 669 01:04:13,960 --> 01:04:22,900 Zato - vsak - si ogleduje slovar - 670 01:04:22,900 --> 01:04:26,200 Tako v slovarju, so vse naše besede. 671 01:04:26,200 --> 01:04:30,500 Vsak je na novi progi. 672 01:04:30,500 --> 01:04:32,510 F skeniranja se bo pobral to besedo. 673 01:04:32,510 --> 01:04:38,750 Če nam ne vključujejo novo vrstico, potem je možno, da bo naslednji f skeniranje pravkar prebrali novo vrstico. 674 01:04:38,750 --> 01:04:44,180 Toda tudi novo linijo potem bo šele prezreti novo vrstico. 675 01:04:44,180 --> 01:04:49,440 Ampak nikoli ne bomo dobili del besede, ker smo vedno bere do nove proge, ni važno kaj. 676 01:04:49,440 --> 01:04:54,530 [Študent] Kaj pa, če iščete besedo "Cisse," kot Cisse. 677 01:04:54,530 --> 01:04:57,380 Bo to, da najdejo, in pravijo, da je tekma? 678 01:04:57,380 --> 01:05:05,110 Torej, tukaj smo - bo brati - to je pravzaprav dobra točka. 679 01:05:05,110 --> 01:05:10,660 Mi nikoli ne uporablja trenutno - je beseda, ki jo iščeš, je prvi argument v ukazni vrstici. 680 01:05:10,660 --> 01:05:16,460 Torej niz, beseda = argv 1. 681 01:05:16,460 --> 01:05:20,020 Torej, niz, ki ga iščemo, je argv 1. 682 01:05:20,020 --> 01:05:23,290 Nismo iskali besedo na vse v naši skeniranja f. 683 01:05:23,290 --> 01:05:28,030 Kaj bomo počeli s pregledovalnikom f postaja vsako besedo v slovarju, 684 01:05:28,030 --> 01:05:34,320 in potem, ko smo to besedo gremo uporabiti strcmp jih primerjati. 685 01:05:34,320 --> 01:05:39,210 Bomo primerjali našo besedo in tisto, kar smo pravkar prebral noter 686 01:05:39,210 --> 01:05:45,110 Tako neizogibno, da bomo na koncu delaš kup skeniranja fs 687 01:05:45,110 --> 01:05:52,130 dokler se prav tako se zgodi, da bo skeniranje f vrniti - 688 01:05:52,130 --> 01:05:54,800 se bo vrnil 1, dokler se ujema novo besedo, 689 01:05:54,800 --> 01:06:01,360 in se bo vrnil nekaj drugega, takoj ko je zaostala za besedo. 690 01:06:01,360 --> 01:06:08,440 Beremo v celotnem slovarju, hranjenje po vrsticah vsaka beseda v spremenljivke s. 691 01:06:08,440 --> 01:06:17,240 Nato smo primerjali z besedo sekund, in če primerjava == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp se zgodi, da bi bil dosežen, če 0 tekma. 693 01:06:21,650 --> 01:06:31,510 Torej, če je bilo 0, potem lahko natisnete f, usklajena, 694 01:06:31,510 --> 01:06:35,370 ali beseda v slovarju, ali karkoli želite natisniti f. 695 01:06:35,370 --> 01:06:41,450 In potem - ne želimo, da f zapreti, znova in znova. 696 01:06:41,450 --> 01:06:50,410 To je tisto kar želimo narediti, in mi smo ne samo išče besedo v slovarju. 697 01:06:50,410 --> 01:06:56,660 Tako smo lahko storili, če bi želeli, da si za svojega vzorca, Cisse, kot si že rekel, 698 01:06:56,660 --> 01:07:00,260 če želimo, da si za to vzorcu, potem ne bi bilo v primeru 699 01:07:00,260 --> 01:07:08,010 ker je to dejansko ni beseda, ampak ena od besed iz slovarja, ki se zgodi, da imajo v njem. 700 01:07:08,010 --> 01:07:13,560 Zato bi bilo ujema to besedo, vendar to podmnožica besede ni sama beseda. 701 01:07:13,560 --> 01:07:17,250 Ampak to ni, kako jo uporabljate, smo berete v vsaki besedi 702 01:07:17,250 --> 01:07:19,740 in potem primerjali besedo, ki jo imamo s to besedo. 703 01:07:19,740 --> 01:07:25,780 Torej smo vedno primerjali polni besed. 704 01:07:25,780 --> 01:07:29,620 Lahko pošljemo zaključenih rešitev kasneje. 705 01:07:29,620 --> 01:07:32,050 To je nekako skoraj pravilen odgovor, se mi zdi. 706 01:07:32,050 --> 01:07:34,720 [Student komentar, nerazumljiv] 707 01:07:34,720 --> 01:07:40,870 Oh, sem se znebiti prej? Char je, mislim, da je rekel 127 - Pozabil sem, kaj je največji. 708 01:07:40,870 --> 01:07:44,100 Bomo pač 128, sedaj je dovolj dolg. 709 01:07:44,100 --> 01:07:46,570 Mi ni treba natisniti ničesar. 710 01:07:46,570 --> 01:07:56,440 Mi smo tudi želeli bodo morali zapreti svojo datoteko, in da bi morala biti približno pravilen odgovor. 711 01:07:56,440 --> 01:07:59,440 CS50.TV