1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] § Problém 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 Takže, ja som Rob. Som senior na Kirkland. To je môj tretí rok TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Je to prvýkrát, čo sme sa pri prechode od tradičnej prednáška štýlu oddielu, 6 00:00:22,220 --> 00:00:25,610 kde sme tak nejako preskúmania, čo sa stalo v prednáške a potom vy klásť otázky, 7 00:00:25,610 --> 00:00:32,250 teraz je oveľa viac problémov na báze, kde využívame priestory, a - 8 00:00:32,250 --> 00:00:37,410 Oh, tak nápad je ísť do tohto odkazu som vás poslal, a potom budete mať v mojom vesmíre. 9 00:00:37,410 --> 00:00:42,410 Má niekto nemá notebook? Dobre. 10 00:00:42,410 --> 00:00:47,050 Takže budeme používať toto, a my bude robiť problémy žiť v sekcii 11 00:00:47,050 --> 00:00:50,740 a diskutovať o nich, a prísť na to, čo sa deje 12 00:00:50,740 --> 00:00:56,390 a ja by som mohol vytiahnuť niektoré z kódu, a mohol by som diskutovať o svoje nápady. 13 00:00:56,390 --> 00:01:02,140 Takže má niekto mal problémy? 14 00:01:02,140 --> 00:01:07,000 Môžete chatovať na strane, ja neviem, či budeme mať dôvod pre to. 15 00:01:07,000 --> 00:01:12,270 Teraz, rovnako ako v predchádzajúcom supersection, ak ste boli v tej triede, viete, čo to je asi tak. 16 00:01:12,270 --> 00:01:19,200 Na všetkých množín P tam to bude tieto oddiely. 17 00:01:19,200 --> 00:01:22,550 Takže P-set 2, špecifikácie, myslím, že si to videl na P-set 1 už. 18 00:01:22,550 --> 00:01:27,400 Ale môžeme sa pozrieť na P-set 2 za to, čo budeme ísť cez dnes. 19 00:01:27,400 --> 00:01:29,460 A uvidíte časť otázok. 20 00:01:29,460 --> 00:01:37,530 Takže to bude vo všetkých P-množín; tam bude časť otázky. 21 00:01:37,530 --> 00:01:41,340 Zatiaľ sme povedali, "Považujem to príležitosť k praxi." 22 00:01:41,340 --> 00:01:44,940 Nebudete vyzvaní na predloženie tohto programu. 23 00:01:44,940 --> 00:01:48,480 Myšlienka je, že tieto majú druh vám pomôže začať s problémového súboru. 24 00:01:48,480 --> 00:01:53,220 Myslím, že na Hacker vydania, sú veľa z nich má byť len nové, zaujímavé veci sa učiť. 25 00:01:53,220 --> 00:01:58,590 Nesmú byť priamo uplatniteľné na problém sade. 26 00:01:58,590 --> 00:02:01,810 A práve teraz sa nemá odošlite je, ale v teórii, 27 00:02:01,810 --> 00:02:07,480 pre neskoršie problémové súbory, môžete predložiť ich, a tak môžete buď prísť na časti 28 00:02:07,480 --> 00:02:10,380 alebo sledovať sekcii získať odpovede, alebo môžete len získať ich na svoje vlastné 29 00:02:10,380 --> 00:02:16,350 Ak nemáte pocit, že sa teší moju prítomnosť. 30 00:02:16,350 --> 00:02:21,010 Takže - myslím, že to je prvý z nich. 31 00:02:21,010 --> 00:02:29,280 Oh. Tiež, podľa týchto oddielov otázok sme tiež kladiete otázky ohľadom šortiek. 32 00:02:29,280 --> 00:02:33,440 Takže myslím, že v zásade ste mali sledovať, pred príchodom do oddielu, 33 00:02:33,440 --> 00:02:38,550 ale to je v poriadku, ak nechcete, pôjdeme na ne rovnako. 34 00:02:38,550 --> 00:02:42,590 Takže môžeme začať s týmito: "Ako while líši od do-while? 35 00:02:42,590 --> 00:02:46,210 Pokiaľ je to ten druhý obzvlášť užitočné? " 36 00:02:46,210 --> 00:02:49,390 Takže niekto nejaký -? 37 00:02:49,390 --> 00:02:52,730 [Študent] do-while bude vždy vykonávať aspoň raz. 38 00:02:52,730 --> 00:03:02,950 Áno. Tak, že je rozdiel. While - budem len to tu - slučke while, máme podmienku 39 00:03:02,950 --> 00:03:19,760 tu, vzhľadom k tomu, do-while, nemáte podmienku, kým sme sem dole. 40 00:03:19,760 --> 00:03:24,130 A tak, keď váš program je realizovať, a to sa dostane do slučky while, 41 00:03:24,130 --> 00:03:26,380 okamžite skontroluje, či je táto podmienka pravdivá. 42 00:03:26,380 --> 00:03:30,710 Ak táto podmienka nie je pravda, bude to len preskočiť slučku úplne. 43 00:03:30,710 --> 00:03:34,390 Do-while, pretože program je realizovať, sa dostane do "robiť." 44 00:03:34,390 --> 00:03:37,920 Nič sa nedeje v tomto bode, len pokračuje v realizácii. 45 00:03:37,920 --> 00:03:42,690 Potom, keď to udrie do "chvíľu", v prípade, že je podmienka splnená, bude to slučka späť a urobiť to znova 46 00:03:42,690 --> 00:03:46,730 a znovu a znovu, kým sa podmienka nie je pravda, a potom už len padá. 47 00:03:46,730 --> 00:03:50,600 Takže, s tým rozdielom,, že to môže preskočiť rovno od samého začiatku. 48 00:03:50,600 --> 00:03:56,770 To nutne vykonáva raz a potom sa môže spustiť viackrát, ak je podmienka stále platí. 49 00:03:56,770 --> 00:04:03,720 Takže zatiaľ čo slučka bude len to, že raz, alebo - while slučky - my sa nemusí robiť vôbec, 50 00:04:03,720 --> 00:04:07,900 pretože akonáhle sa dostaneme k tomu, ak je podmienka nepravdivá, budeme jednoducho preskočiť priamo nad ním. 51 00:04:07,900 --> 00:04:11,770 Vzhľadom k tomu, do-while slučky, budeme ju vykonať raz, nutne. 52 00:04:11,770 --> 00:04:14,560 Potom, keď sa dostaneme do stavu, skontrolujeme, či je to pravda, alebo nie. 53 00:04:14,560 --> 00:04:19,790 Ak je to pravda, my to urobíme znova, ak je to false, budeme len pokračovať ďalej. 54 00:04:19,790 --> 00:04:24,680 Takže keď je táto zvlášť užitočné? 55 00:04:24,680 --> 00:04:31,190 Takže môžem povedať, že v plnom rozsahu na 4 roky, 3 roky, bez ohľadu, 56 00:04:31,190 --> 00:04:38,780 že som bol programovanie, použil som to ako, pod 10 krát. 57 00:04:38,780 --> 00:04:43,140 A pravdepodobne 5 z nich sú v CS50, keď sme zavádzanie do-while. 58 00:04:43,140 --> 00:04:47,510 Takže keď sa vám použiť do-while slučky? 59 00:04:47,510 --> 00:04:49,510 Kedy je - jo? 60 00:04:49,510 --> 00:04:53,180 [Študent] Keď sa snažíte dostať vstup užívateľa, alebo niečo chcete skontrolovať - 61 00:04:53,180 --> 00:04:59,700 Jo. Takže do-while slučky, vstup užívateľa je veľký. 62 00:04:59,700 --> 00:05:03,160 To je dôvod, prečo na prvý sady pár problémov, ak chcete požiadať užívateľa, ako, 63 00:05:03,160 --> 00:05:08,520 "Daj mi reťazec," nemôže pokračovať, kým vám, že reťazec. 64 00:05:08,520 --> 00:05:12,980 A tak si, nutne, je potrebné požiadať o reťazec aspoň raz. 65 00:05:12,980 --> 00:05:16,950 Ale potom v prípade, že odpoveď niečo zlé, potom sa budete musieť slučky späť a požiadať znovu. 66 00:05:16,950 --> 00:05:20,810 Ale iné, ako vstup užívateľa, to je veľmi zriedkavé, že som sa stretnúť s prípadom 67 00:05:20,810 --> 00:05:27,170 tam, kde chcem slučky "aspoň raz", ale možno aj viac. 68 00:05:27,170 --> 00:05:33,370 Otázky alebo -? Má niekto používa do-while niekde inde? 69 00:05:33,370 --> 00:05:36,780 Dobre. Takže ďalší je, "Čo nelegálnej identifikátor 70 00:05:36,780 --> 00:05:43,310 zvyčajne označujú, či výstup by kovový zvuk? " 71 00:05:43,310 --> 00:05:47,380 Takže, aký druh kódu by som mohol napísať dostať "neohlásené identifikátor?" 72 00:05:47,380 --> 00:05:49,550 [Študent] To x = 2? 73 00:05:49,550 --> 00:05:52,650 Takže môžeme to skúsiť tu, x = 2. 74 00:05:52,650 --> 00:06:04,830 Urobíme to - oh, som sa na neho. Takže tu máme - v poriadku. 75 00:06:04,830 --> 00:06:07,100 "Použitie nedeklarovaný identifikátor x." 76 00:06:07,100 --> 00:06:11,610 Tak to je nedeklarovaný identifikátor, premenná. 77 00:06:11,610 --> 00:06:13,910 To bude často volať premennú identifikátor. 78 00:06:13,910 --> 00:06:17,300 Takže to nemusí vedieť, že je to vlastne premenná, ale nevie, čo to je. 79 00:06:17,300 --> 00:06:19,380 Takže je to identifikátor. 80 00:06:19,380 --> 00:06:26,060 Tak prečo je nedeklarovaný? Jo. 81 00:06:26,060 --> 00:06:32,190 Tak aby bolo jasno na terminológiu, vyhlásenie o premenné 82 00:06:32,190 --> 00:06:37,360 je, keď poviete "int x," alebo "string y," Čokoľvek. 83 00:06:37,360 --> 00:06:41,910 Inicializácia premennej, alebo priradenie premenné, 84 00:06:41,910 --> 00:06:44,510 je kedykoľvek poviete "x = 2." 85 00:06:44,510 --> 00:06:52,950 Takže môžeme vykonať v samostatných krokoch, int x, x = 2, a kým - môžeme mať veľa vecí tu - 86 00:06:52,950 --> 00:07:00,350 ale kým táto položka stane, je x ešte inicializovaná, ale bol vyhlásený. 87 00:07:00,350 --> 00:07:06,760 A tak môžeme samozrejme urobiť v 1 rade, a teraz sme deklarovať a inicializácii. 88 00:07:06,760 --> 00:07:10,730 Otázky? 89 00:07:10,730 --> 00:07:18,390 A konečne, "Prečo je Cipher Caesar nepríliš bezpečné?" 90 00:07:18,390 --> 00:07:23,830 Takže prvé, niekto chce povedať, čo Cipher Caesar je? 91 00:07:23,830 --> 00:07:28,100 [Študent] Caesar Cipher len je, že si zmapovať, posuniete každý list, 92 00:07:28,100 --> 00:07:34,420 určitý počet písmen prejsť, a presunúť späť cez, a to nie je moc bezpečné, pretože 93 00:07:34,420 --> 00:07:42,260 tam je len 26 možných možností, a vy jednoducho musíte vyskúšať každý 1 z tých, kým si to. 94 00:07:42,260 --> 00:07:45,470 Oh. Takže, mám opakovať? 95 00:07:45,470 --> 00:07:51,600 Caesar Cipher, to - myslím, budete sa s tým vyrovnať na problémy, ktoré vás - 96 00:07:51,600 --> 00:07:56,110 alebo myslím, že štandardné edícii problémového súboru, ktorý nie je na hackerské vydanie. 97 00:07:56,110 --> 00:08:01,550 Takže na štandardnej verzii na problém sady, dostanete správu ako, "Hello, world" 98 00:08:01,550 --> 00:08:08,410 a máte aj číslo ako 6, a budete mať túto správu, a každý jednotlivý znak, 99 00:08:08,410 --> 00:08:11,310 otočíte ju 6 pozícií v abecede. 100 00:08:11,310 --> 00:08:16,560 Takže "h" v ahoj stane h-i-j-k-l-m-n. 101 00:08:16,560 --> 00:08:19,600 Takže prvé písmeno bude n Robíme to isté s e 102 00:08:19,600 --> 00:08:23,530 Ak máme, rád, z alebo niečo, potom zabalíme späť k "." 103 00:08:23,530 --> 00:08:29,280 Ale každá postava dostane cykluje 6 znakov neskôr v abecede, a to nie je moc bezpečné 104 00:08:29,280 --> 00:08:35,440 pretože tam sú len 26 možností, ako veľa spôsobov, ako by ste mohli zabaliť jedno písmeno. 105 00:08:35,440 --> 00:08:42,919 Takže si môžete jednoducho skúste všetkých 26 z nich, a pravdepodobne, na dostatočne dlhé správy, 106 00:08:42,919 --> 00:08:46,860 iba 1 z týchto možných 26 vecí, bude čitateľná, 107 00:08:46,860 --> 00:08:50,300 a čitateľné z nich ich bude pôvodná správa. 108 00:08:50,300 --> 00:08:56,240 Takže to nie je moc dobrý spôsob šifrovania vôbec nič. 109 00:08:56,240 --> 00:08:59,070 Nesúvisí s krátkych filmov, "Čo je to funkcia?" 110 00:08:59,070 --> 00:09:03,370 Takže to, čo je funkcia? Áno. 111 00:09:03,370 --> 00:09:11,640 [Študent] Je to ako samostatný kus kódu, ktorý môžete volať prejsť a potom si návratovú hodnotu čohokoľvek. 112 00:09:11,640 --> 00:09:18,160 Jo. Takže budem na ňu odpovedať tým, že aj odpovede na ďalšie - alebo opakovanie tým, že tiež len odpoveďou na budúci. 113 00:09:18,160 --> 00:09:22,410 Môžete použiť funkcie, nie len kopírovanie a vkladanie kódu znova a znova. 114 00:09:22,410 --> 00:09:27,200 Len sa tento kód, vložte ho do fuction, a potom by ste mohol len zavolať funkciu 115 00:09:27,200 --> 00:09:29,870 všade tam, kde ste boli kopírovanie a vkladanie. 116 00:09:29,870 --> 00:09:33,350 Takže funkcie sú užitočné. 117 00:09:33,350 --> 00:09:35,860 Takže teraz budeme robiť skutočné problémy. 118 00:09:35,860 --> 00:09:46,490 Prvý z nich. A tak vznikla myšlienka na prvý z nich je, odovzdať to reťazec, a bez ohľadu na - 119 00:09:46,490 --> 00:09:52,060 alebo to hovorí všade malé písmená? Nehovorí všetky malé písmená. 120 00:09:52,060 --> 00:09:57,730 Takže správa môže byť čokoľvek, a - oh no. To robí. 121 00:09:57,730 --> 00:10:01,610 "Pre jednoduchosť, môžete predpokladať, že užívateľ bude iba vstupné malé písmená a medzery." 122 00:10:01,610 --> 00:10:08,180 Tak sme odovzdať správu s iba malými písmenami a potom sme striedať 123 00:10:08,180 --> 00:10:15,450 medzi kapitálom a malými písmenami - sme zmeniť reťazec k hlavným a malé písmená, striedavé. 124 00:10:15,450 --> 00:10:22,920 Takže predtým, než sme vám druhý dokonca ponoriť do problému, 125 00:10:22,920 --> 00:10:32,420 Čo je prvá vec, ktorú musíme urobiť? 126 00:10:32,420 --> 00:10:36,900 Oh, čo som práve kliknite na? Oh, som klikol na e-mailu v tu. 127 00:10:36,900 --> 00:10:42,870 Takže prvá vec, ktorú musíme urobiť, - som pri pohľade na nepravú? 128 00:10:42,870 --> 00:10:49,320 Je to súčasť tohto jedného? 129 00:10:49,320 --> 00:10:51,320 Nie, tie sú stále tam, hoci. 130 00:10:51,320 --> 00:10:55,160 Dobre, stále tu. 131 00:10:55,160 --> 00:11:03,160 Teraz nemôžeme predpokladať -? Áno. Tu nemôžeme predpokladať, že je to len malá a priestory. 132 00:11:03,160 --> 00:11:07,770 Takže teraz máme čo do činenia s tým, že listy môžu byť, čo chceme, aby boli. 133 00:11:07,770 --> 00:11:11,910 A tak prvá vec, ktorú chcete urobiť, je len dostať správu. 134 00:11:11,910 --> 00:11:19,790 My len potrebujeme dostať reťazec, reťazec s = GetString, v poriadku. 135 00:11:19,790 --> 00:11:24,890 Teraz tento problém, existuje niekoľko spôsobov, ako to urobiť. 136 00:11:24,890 --> 00:11:29,840 Ale budeme chcieť použiť bitové operátory tu. 137 00:11:29,840 --> 00:11:35,280 Existujú ľudia, ktorí buď neboli na supersection, 138 00:11:35,280 --> 00:11:37,480 alebo tak niečo, a neviem, čo bitové operátory sú? 139 00:11:37,480 --> 00:11:41,710 Alebo, ako sa vzťahujú na ASCII v žiadnom prípade? 140 00:11:41,710 --> 00:11:45,650 [Študent] som nebol na supersection, ale ja viem, čo bitové operátory sú. 141 00:11:45,650 --> 00:11:49,560 Dobre. Takže nemám ísť cez základy z nich, ale ja ti to vysvetlím 142 00:11:49,560 --> 00:11:51,830 to, čo budeme chcieť použiť tu. 143 00:11:51,830 --> 00:11:59,680 Takže "A": Binárne reprezentácie kapitálu A, počet je 65. 144 00:11:59,680 --> 00:12:07,560 Ja som jednoducho ísť sa pozrieť na - 41 sa bude 01000001. 145 00:12:07,560 --> 00:12:14,170 Takže by malo byť 65 v desiatkovej sústave, takže je to binárny reprezentácie znaku hlavného mesta A. 146 00:12:14,170 --> 00:12:19,440 Teraz, binárne reprezentácie znaku malá "" 147 00:12:19,440 --> 00:12:33,350 bude to isté, skoro. Je to - 6, jo. To je správne. 148 00:12:33,350 --> 00:12:37,670 Takže binárne kapitálu, binárne malá "." 149 00:12:37,670 --> 00:12:43,940 Takže si všimnúť, že rozdiel medzi A a "a" je to jediný bit. 150 00:12:43,940 --> 00:12:49,440 A to sa stane, že 32 bit, bit predstavuje počet 32. 151 00:12:49,440 --> 00:12:53,910 A to dáva zmysel, pretože je 65, "" je 97. 152 00:12:53,910 --> 00:12:56,610 Rozdiel medzi nimi je 32. 153 00:12:56,610 --> 00:13:03,770 Takže teraz vieme, že môžeme previesť od A do "a" tým, že 154 00:13:03,770 --> 00:13:09,710 a bitové ORing to, s - to vyzerá ako 1. 155 00:13:09,710 --> 00:13:20,900 To je bitový súčet, s 00100000, a že nám dá "." 156 00:13:20,900 --> 00:13:26,850 A môžeme dostať z "A" od doplnkov ANDing 157 00:13:26,850 --> 00:13:33,700 s 11, 0 na tomto mieste, 11111. 158 00:13:33,700 --> 00:13:43,840 Takže to bude potom dať nám presne to, čo "bolo, ale zrušiť túto individuálnu bit, 159 00:13:43,840 --> 00:13:50,070 takže budeme musieť 01000001, ja neviem, či som počítal správne. 160 00:13:50,070 --> 00:13:56,750 Ale táto technika doplnkov Oring sa dostať z hlavného mesta na malé písmená, 161 00:13:56,750 --> 00:14:02,080 a bitové ANDing dostať sa z malých písmen na základnom imaní nie je exkluzívna k A. 162 00:14:02,080 --> 00:14:06,510 Všetky listy, K vs K, Z vs z, 163 00:14:06,510 --> 00:14:10,080 všetky z nich sa práve chystá sa líši od tohto jediného bitu. 164 00:14:10,080 --> 00:14:16,290 A tak môžete použiť pre zmenu z akéhokoľvek malým písmenom na akúkoľvek veľkým písmenom a naopak. 165 00:14:16,290 --> 00:14:26,670 Dobre. Tak jednoduchý spôsob, ako sa dostať z toho - a tak namiesto toho, aby musel 166 00:14:26,670 --> 00:14:32,170 napísať čokoľvek 1011111 je - jednoduchý spôsob, ako reprezentovať toto číslo, a toto nie je jeden 167 00:14:32,170 --> 00:14:39,710 že som išiel cez v supersection, ale tilda (~) je ďalší bitový operátor. 168 00:14:39,710 --> 00:14:42,520 Čo ~ robí, je, že sa pozerá na bitovú reprezentáciu. 169 00:14:42,520 --> 00:14:45,630 Poďme sa ľubovoľný počet. 170 00:14:45,630 --> 00:14:53,130 To je len niektoré binárne číslo, a to, čo ~ sa je to len prevráti všetky bity. 171 00:14:53,130 --> 00:15:00,630 Takže je to 1, teraz 0, to je 0, teraz 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Takže to je všetko ~ robí. Takže 32 bude číslo - zbaviť toho - 173 00:15:08,320 --> 00:15:23,320 takže 32 bude číslo 00100000, a tak ~ z toho sa bude 174 00:15:23,320 --> 00:15:29,980 Toto číslo sa tu, že som AND 'a' s 175 00:15:29,980 --> 00:15:35,600 Má každý vidieť, že? To je celkom bežné, ako keď chcete zistiť, 176 00:15:35,600 --> 00:15:40,740 pre neskoršie veci, ktoré by sme mohli byť svedkami, keď chceme zistiť, či - 177 00:15:40,740 --> 00:15:44,710 alebo chceme, aby všetko, každý bit set s výnimkou 1 178 00:15:44,710 --> 00:15:47,910 Máte sklon robiť ~ kúsku, ktorý nechceme nastaviť. 179 00:15:47,910 --> 00:15:53,090 Takže nechceme na 32 bit set, a tak sme sa ~ 32. 180 00:15:53,090 --> 00:15:57,790 Dobre. Takže môžeme použiť všetky tie tu. 181 00:15:57,790 --> 00:16:03,000 Dobre, tak je to v poriadku, ak ste neurobili, budeme pomaly pešo cez dohromady, 182 00:16:03,000 --> 00:16:11,870 alebo pešo cez to, tak - cez to. Prechádzka to. 183 00:16:11,870 --> 00:16:20,790 Takže máme reťazec, a chceme slučku každého znaku v tomto reťazci a urobiť niečo k tomu. 184 00:16:20,790 --> 00:16:26,710 Tak ako my slučku povrázku? Čo by sme mali použiť? 185 00:16:26,710 --> 00:16:30,980 Nebudem to robiť tu. Jo. 186 00:16:30,980 --> 00:16:42,940 Takže mám Iterator, a povedal to, ale ako to mám vedieť, koľko znakov v reťazci? 187 00:16:42,940 --> 00:16:47,030 Strlen (s), potom i + +. 188 00:16:47,030 --> 00:16:49,860 Takže to, čo som tu urobil, nie je najlepší spôsob, ako robiť veci. 189 00:16:49,860 --> 00:16:51,860 Vie niekto, prečo? 190 00:16:51,860 --> 00:16:55,290 Pretože máte kontrolu jazyk reťazca zakaždým. 191 00:16:55,290 --> 00:17:06,859 Takže sa budeme chcieť pohybovať strlen, mohol by som povedať tu, int length = strlen (s), 192 00:17:06,859 --> 00:17:11,900 a potom sa aj 00:17:20,410 Mohol by som tiež urobiť int i = 0, dĺžka = strlen (s). 194 00:17:20,410 --> 00:17:25,010 A tak to je trochu vhodnejšia, pretože teraz som obmedzil rozsah 195 00:17:25,010 --> 00:17:29,150 premennej dĺžky len to "pre" slučky, namiesto toho, aby jeho vyhlásenia pred 196 00:17:29,150 --> 00:17:34,990 a že vždy existuje, a v prípade, že ste nepochopil, prečo to je zlé, 197 00:17:34,990 --> 00:17:39,410 alebo prečo pôvodné bol zlý, to - začať pre sláčiky. 198 00:17:39,410 --> 00:17:43,380 Overil som si podmienku. Je aj 00:17:46,790 Takže dĺžka s, poďme pracovať s "ahoj" po celú dobu. 200 00:17:46,790 --> 00:17:49,670 Takže dĺžka S, H-e-l-l-o. Dĺžka je 5. 201 00:17:49,670 --> 00:17:57,580 Takže i = 0, dĺžka je 5, tak aj nie je <5, takže cyklus pokračuje. 202 00:17:57,580 --> 00:18:02,750 Potom sme zase. Skontrolujeme stav. Je aj 00:18:08,390 Tak poďme skontrolovať dĺžku ahoj. H-e-l-l-o. To je 5, nie je aj <5, takže sme opäť pokračovať. 204 00:18:08,390 --> 00:18:13,330 Takže sme sa výpočtu, počítame ahoj, pre každú iteráciu slučky, 205 00:18:13,330 --> 00:18:17,380 dokonca si myslel, že to nikdy nezmení, je to vždy bude 5. 206 00:18:17,380 --> 00:18:22,530 Tak sme len spomenúť 5 dopredu, a teraz všetko lepšie. 207 00:18:22,530 --> 00:18:24,990 Takže iterácia celý reťazec. 208 00:18:24,990 --> 00:18:31,470 Čo chceme urobiť pre každého znaku reťazca? 209 00:18:31,470 --> 00:18:38,510 [Študent povedané, nezrozumiteľným] 210 00:18:38,510 --> 00:18:47,000 Jo. Takže, ak je znak non-abecedný, potom my jednoducho chceme preskočiť cez neho. 211 00:18:47,000 --> 00:18:52,300 Pretože sme len o jednotlivých písmen abecedy, nemôžeme využiť číslo. 212 00:18:52,300 --> 00:19:10,850 Takže, ako môžeme urobiť? Takže náš stav, takže ak chceme niečo - skontrolovať, či je to podľa abecedy. 213 00:19:10,850 --> 00:19:14,060 Tak ako to skontrolovať? 214 00:19:14,060 --> 00:19:18,720 [Študent] Stačí použiť funkciu je alfa. 215 00:19:18,720 --> 00:19:23,160 Je to zahrnuté do jedného z nich, alebo sú ako, char.h alebo tak niečo? 216 00:19:23,160 --> 00:19:32,710 Poďme sa používať je alfa funkcie, a použiť explicitné - takže máme s [i], 217 00:19:32,710 --> 00:19:40,460 že je ôsmy charakter s, nezabudnite, že reťazec je pole znakov, 218 00:19:40,460 --> 00:19:43,180 tak ôsmy charakter s 219 00:19:43,180 --> 00:19:49,280 Teraz, ak sa jedná o veľké písmeno, vieme, že musí byť v určitom rozsahu. 220 00:19:49,280 --> 00:19:54,370 A čo je to rad? 221 00:19:54,370 --> 00:20:07,860 Jo. Takže ak s [i] je ≥ 65, a s [i] je ≤ 90, čo by som mal urobiť miesto? 222 00:20:07,860 --> 00:20:18,470 Jo. Takže by ste mali absolútne nikdy poznať ASCII hodnoty nič vôbec. 223 00:20:18,470 --> 00:20:25,640 Nikdy si z čísel 65, 90, 97 a 102, alebo čo to je. 224 00:20:25,640 --> 00:20:32,470 Nemusíte - 112 -? Nemusíte poznať tie vôbec. To je zle taky. 225 00:20:32,470 --> 00:20:41,940 Používajte iba single-úvodzovkami, apostrof konštanty. Takže "A" a menšie ako 90 je "Z." 226 00:20:41,940 --> 00:20:47,930 A to je výrazne lepšie - ja neviem, vršok mojej hlave, ktorý je Z 90. 227 00:20:47,930 --> 00:20:52,690 Ja viem, vršok hlavy, že "Z" je hlavným mestom Z. 228 00:20:52,690 --> 00:21:02,100 Tak dlho, ako je to v rozmedzí kapitálu ku kapitálu Z, alebo si môžete skontrolovať malými písmenami, 229 00:21:02,100 --> 00:21:17,010 Alebo ak je to v rozmedzí ≥ "" a ≤ z 230 00:21:17,010 --> 00:21:19,010 Tak to je naša podmienka. 231 00:21:19,010 --> 00:21:22,520 Štýl pre prípad, aby tieto veci sa menia. 232 00:21:22,520 --> 00:21:29,520 Urobím to takto. 233 00:21:29,520 --> 00:21:31,520 A teraz, čo chceme robiť? 234 00:21:31,520 --> 00:21:39,530 Vieme, že tento list je charakter, abecedný znak. 235 00:21:39,530 --> 00:21:46,270 Takže musíme striedať, či by to malo byť teraz písmeno alebo malé písmeno. 236 00:21:46,270 --> 00:21:48,820 Ako sledujeme, z ktorých jeden chceme, aby to bolo? 237 00:21:48,820 --> 00:21:55,520 [Študent hlasy, nezrozumiteľné] 238 00:21:55,520 --> 00:21:59,150 Takže áno, ale dovoľte mi, aby som skontrolovať. 239 00:21:59,150 --> 00:22:04,910 Modul 0-2 bolo povedané, bol návrh vyhodiť, a ja s tým súhlasím. 240 00:22:04,910 --> 00:22:11,780 Okrem upozornenia, že rovnako ako - je to tak? Jo. 241 00:22:11,780 --> 00:22:18,270 Je to každý druhý, ale nemôžeme modul 2 I, alebo aj mod 2, pretože 242 00:22:18,270 --> 00:22:22,950 Všimnite si, že E je kapitál a "" je malá? Ale je tu priestor oddeľuje? 243 00:22:22,950 --> 00:22:27,150 Takže sa budeš rovnaký mod 2, ale sú to rôzne prípady. 244 00:22:27,150 --> 00:22:29,150 [Študent otázka, nezrozumiteľným] 245 00:22:29,150 --> 00:22:34,690 Jo. Takže sme len tak, aby sa počet. 246 00:22:34,690 --> 00:22:38,730 Mohli by sme tiež urobiť, že tu, ak by sme chceli, aby mohol dostať trochu nepraktický 247 00:22:38,730 --> 00:22:41,300 v pre sláčiky vyhlásenie, Dám to sem. 248 00:22:41,300 --> 00:22:48,840 Takže int count = začína 0. 249 00:22:48,840 --> 00:22:54,070 A tak teraz, budem počítať, koľko abecedné znaky sme mali. 250 00:22:54,070 --> 00:22:59,550 Takže sme nevyhnutne bude počítať + +, pretože sme zistili, ďalšie písmeno abecedy. 251 00:22:59,550 --> 00:23:09,130 Ale, tak teraz hovoríš, že ak bude gróf mod 2. 252 00:23:09,130 --> 00:23:12,590 Takže čo keď počet mod 2? Oh. Urobím == 0 zatiaľ. 253 00:23:12,590 --> 00:23:21,740 Budeme tiež ísť cez to. Takže pokiaľ Počet mod 2 == 0, potom čo? 254 00:23:21,740 --> 00:23:27,830 [Študenti odpoveď, nezrozumiteľné] 255 00:23:27,830 --> 00:23:32,750 Takže chceme, aby to skončilo až veľké písmená. 256 00:23:32,750 --> 00:23:37,520 K dispozícii sú 2 prípady; veľké aj malé písmená sú 2 prípady. 257 00:23:37,520 --> 00:23:40,990 Takže ak sme v malom písme musíme robiť to uppercase. 258 00:23:40,990 --> 00:23:43,710 Ak je to veľká nepotrebujeme nič robiť. 259 00:23:43,710 --> 00:23:50,760 Ale je tu spôsob, ako - shouldn't sa prevrátený - 260 00:23:50,760 --> 00:23:54,800 že ani potrebné skontrolovať, či je to veľká alebo malé písmená? 261 00:23:54,800 --> 00:24:02,240 Čo môžeme robiť, aby sme sa vždy uistite, že sme vždy skončí na veľké písmená? 262 00:24:02,240 --> 00:24:07,830 Tak zistíte, čo sme urobili pre malé 'a'; čo keby sme urobili rovnaký presne to na veľké písmená? 263 00:24:07,830 --> 00:24:11,900 Má veľká zmena, alebo sa hodnota zmeny? 264 00:24:11,900 --> 00:24:23,100 Jo. Takže žiadne veľké písmeno bitový AND s ~ 32 bude ten rovnaký veľká postava 265 00:24:23,100 --> 00:24:29,220 pretože pre každé veľké písmeno je 32. bit nie je nastavený. 266 00:24:29,220 --> 00:24:40,920 Takže ak chceme, aby znak s [i], chceme, aby sa stal malými aj veľkými písmenami. 267 00:24:40,920 --> 00:24:46,890 Takže keby to bolo malé, to je teraz veľká, keby to bolo veľká, je to stále veľká a je to. 268 00:24:46,890 --> 00:24:54,290 Povedal som to v supersection: Môžete použiť 32, ak chcete, ale mám tendenciu preferovať robiť 'a' -, 269 00:24:54,290 --> 00:25:01,150 nie len prostého 32, pretože môže byť akákoľvek iná bit. 270 00:25:01,150 --> 00:25:03,610 Po 32 bitov, môže to byť jedna z nich, alebo by sme dostatok 271 00:25:03,610 --> 00:25:05,840 čísla, aby zastupovali všetky znaky. 272 00:25:05,840 --> 00:25:09,110 Takže, ak sa dostanete 32 bit, mohlo by to byť 64 bit, mohlo by to byť 128 bitov. 273 00:25:09,110 --> 00:25:13,990 Každý z týchto bitov môže byť kúsok, ktorý rozlišuje medzi veľké a malé písmená. 274 00:25:13,990 --> 00:25:18,350 Nemal by som treba vedieť, že je to 32 bit. 275 00:25:18,350 --> 00:25:27,130 Môžem použiť tento "A" - dostať bit, ktorý sa líši medzi dvoma 276 00:25:27,130 --> 00:25:33,000 aby bolo potrebné spoliehať na magického čísla, ktoré je 32. 277 00:25:33,000 --> 00:25:38,770 A tak teraz, inak počítať bolo divné, a tak to, čo chcem robiť? 278 00:25:38,770 --> 00:25:43,920 [Študent odpovede, nezrozumiteľným] 279 00:25:43,920 --> 00:25:45,920 [Študent] Čo je to? 280 00:25:45,920 --> 00:25:49,850 Urobím to za 1 sekundu. 281 00:25:49,850 --> 00:25:55,690 Takže teraz, keď chcem - chcem sa uistiť, že postava je teraz malá, 282 00:25:55,690 --> 00:26:04,140 a tak môžem alebo 32, a 32 znamená "" - A. 283 00:26:04,140 --> 00:26:06,510 Ale oznámenia, rovnaké odôvodnenie ako predchádzajúci, že ak 284 00:26:06,510 --> 00:26:11,670 list bol už malé, a potom ORing o 32 proste stále to malé písmená. 285 00:26:11,670 --> 00:26:16,220 To sa nezmenilo pôvodný charakter. 286 00:26:16,220 --> 00:26:19,910 Ale teraz nemám, aby sa zabránilo povedal, "Ak je to malá, len zabudnúť na to, 287 00:26:19,910 --> 00:26:23,650 ak je to veľká, potom ho zmeniť. " 288 00:26:23,650 --> 00:26:26,900 Je to oveľa pohodlnejšie to urobiť. 289 00:26:26,900 --> 00:26:33,190 [Študent] Škoda, že stratégia odpočítaním veľké písmená z malým práce, keby to nebolo 32? 290 00:26:33,190 --> 00:26:35,330 Keby to bolo, ako, 34, alebo tak niečo? 291 00:26:35,330 --> 00:26:41,840 Takže, čo potrebujete vedieť, že rozdiel medzi 2 je -? >> 1 bit. 292 00:26:41,840 --> 00:26:49,840 To by mohlo byť viac ako 1 bit, tak dlho, kým všetky bity pod tejto polohe sú rovnaké. 293 00:26:49,840 --> 00:26:58,500 Takže potrebujeme aspoň 26 znakov - alebo, je ich tam 26 znakov. 294 00:26:58,500 --> 00:27:04,590 Takže potrebujeme aspoň 26 čísel predstavujú rozdiel - 295 00:27:04,590 --> 00:27:07,650 Rozdiel medzi a "a" musí byť minimálne 26, 296 00:27:07,650 --> 00:27:10,760 inak by sme nemali zastúpené všetky kapitálové čísla. 297 00:27:10,760 --> 00:27:18,630 To znamená, že ak začneme na 1, bude to používať všetky tieto kúsky, 298 00:27:18,630 --> 00:27:23,900 všetkých týchto prvých 5 bitov pre reprezentáciu všetko prostredníctvom Z. 299 00:27:23,900 --> 00:27:32,170 To je dôvod, prečo ďalšie bit, alebo tento bit, ďalšie bit je ten, ktorý si vybrala rozlišovať medzi A a '. " 300 00:27:32,170 --> 00:27:40,930 To je tiež dôvod, prečo v ASCII tabuľke, existuje 5 symboly oddeľujúce veľké písmená z malých písmen. 301 00:27:40,930 --> 00:27:49,050 Vzhľadom k tomu, to sú symboly, navyše 5, ktorá prináša až sa 32 je rozdiel medzi nimi. 302 00:27:49,050 --> 00:27:51,840 [Študent] Tak sme mohli urobiť to, pretože ASCII je navrhnutý tak. 303 00:27:51,840 --> 00:27:57,280 Áno. Ale ASCII - rozdiel môže byť tiež oboch týchto bitov. 304 00:27:57,280 --> 00:28:12,040 Rovnako ako v prípade boli 10000001, a "" bolo 11100001 - zabudol som, čo. 305 00:28:12,040 --> 00:28:18,100 Ale ak to bolo to, potom by sme mohli aj naďalej používať 'a' - A. 306 00:28:18,100 --> 00:28:22,650 Je to práve rozdiel medzi A a "" je stále tieto 2 bity. 307 00:28:22,650 --> 00:28:32,240 Myslím, že je to napísané 48. Je to 32 + 64? Myslím, že to je? 308 00:28:32,240 --> 00:28:40,160 Bolo by ešte 2 bity, každý znak, ako, Z a Z, K a K, 309 00:28:40,160 --> 00:28:45,160 stále by mať rovnaké presné bity nastavené, okrem tých 2 bity. 310 00:28:45,160 --> 00:28:48,870 Takže ak je to vždy pravda, bez ohľadu na to či sme použili ASCII alebo nejaký iný systém, 311 00:28:48,870 --> 00:28:53,050 tak dlho, ako je len stanovený počet bitov, ktoré sú odlišné pre každý znak, 312 00:28:53,050 --> 00:28:55,050 potom to funguje. 313 00:28:55,050 --> 00:29:06,110 Je to len, že 32 bola zriadená, pretože je to prvá by sme mohli prípadne použiť. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Aj uprednostňujú, v prípade, že nie sú vidieť, v prípade, že blok je len jediný riadok, 315 00:29:14,520 --> 00:29:24,280 môžete zbaviť zložených zátvoriek, takže mám tendenciu preferovať robí. 316 00:29:24,280 --> 00:29:34,010 Tiež viete, ako môžeme robiť veci, ako s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Môžete si tiež urobiť s [i] bitové operácie AND = 32. 318 00:29:41,090 --> 00:29:46,400 A bitový sucet = 32. 319 00:29:46,400 --> 00:29:51,490 Tiež, počítať mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Takže pamätajte, že - nebudem písať - žiadne nenulové hodnota je pravda, a 0 je false. 321 00:30:00,900 --> 00:30:07,880 Takže "ak Počet mod 2 == 0" je rovnaké, ako hovoriť "ak nie počítať mod 2." 322 00:30:07,880 --> 00:30:11,580 Asi by som len obrátil linky a povedal, "ak počet mod 2, 323 00:30:11,580 --> 00:30:15,350 sa líšia OR 1, inak si AND 1, "takže som nemal potrebovať" nie. " 324 00:30:15,350 --> 00:30:18,650 Ale to funguje rovnako dobre. 325 00:30:18,650 --> 00:30:25,660 A čo iného môžem robiť? 326 00:30:25,660 --> 00:30:29,060 Dalo by sa kombinovať s ternárnu, ak ste chceli, ale potom to práve robiť veci Messier 327 00:30:29,060 --> 00:30:33,770 a pravdepodobne ťažšie čítať, takže nebudeme robiť. 328 00:30:33,770 --> 00:30:37,330 Každý, kto má nejaké ďalšie návrhy? 329 00:30:37,330 --> 00:30:41,580 Je to všetko problém požiadal? Ach jo. 330 00:30:41,580 --> 00:30:51,070 Takže ako sa zbaviť týchto prázdnych riadkov, teraz budeme tlačiť f,% ​​s je jeden pre reťazce, 331 00:30:51,070 --> 00:30:56,620 Budeme tlačiť F, S. 332 00:30:56,620 --> 00:30:59,330 Teraz poďme spustiť. Urobil som niečo zle? 333 00:30:59,330 --> 00:31:03,200 To je \ "; Chcem n 334 00:31:03,200 --> 00:31:07,840 Dobre. Teraz budeme ho spustiť. Je to pravdepodobne na mňa kričať. 335 00:31:07,840 --> 00:31:11,250 Strlen je v string.h. 336 00:31:11,250 --> 00:31:14,290 Tak to je pekná vec, o Clang je vám povie, čo je to v, 337 00:31:14,290 --> 00:31:19,140 miesto GCC, ktoré len hovorí, "Hej, ty na niečo zabudol, ja neviem, čo to bolo." 338 00:31:19,140 --> 00:31:29,220 Ale to mi povie, "Ty chcel zahrnúť string.h." 339 00:31:29,220 --> 00:31:32,130 Tak som sa výzvu pre čokoľvek, tak to nič nehovorí. 340 00:31:32,130 --> 00:31:42,540 Ale urobíme ich príklade, "ďakuje 4 doplnku". 341 00:31:42,540 --> 00:31:47,880 To vyzerá dobre. Hurá. 342 00:31:47,880 --> 00:31:52,370 Takže návrate do svojej hlavnej, som takmer nikdy to. 343 00:31:52,370 --> 00:31:57,110 Je to voliteľné. A hlavné je jediná funkcia, pre ktorú je voliteľný. 344 00:31:57,110 --> 00:32:07,140 Ak nemáte nič nevracia z hlavnej, je to predpokladá, že ste mal na mysli vrátiť 0. 345 00:32:07,140 --> 00:32:13,070 Otázky? 346 00:32:13,070 --> 00:32:20,980 Dobre. Takže teraz druhý problém. 347 00:32:20,980 --> 00:32:24,810 "Spomeňte si, týždeň 2 druhého prednášky, ktoré vymieňať hodnoty 2 premennej" odovzdaním 348 00:32:24,810 --> 00:32:30,780 tieto 2 premenné do funkcie (aj keď tzv swapu) nie je presne fungovať, aspoň nie bez "ukazovateľov." 349 00:32:30,780 --> 00:32:37,020 A ignorovať ukazovatele, až sa dostaneme k nim. 350 00:32:37,020 --> 00:32:40,070 Chceme vymeniť 2 premenné, nie sme pomocou funkcie na to. 351 00:32:40,070 --> 00:32:43,410 Sme stále robiť to v hlavnom ako to hovorí. 352 00:32:43,410 --> 00:32:48,360 Ale použiť tieto 2 premenné, nechceme používať dočasnú premennú. 353 00:32:48,360 --> 00:32:50,770 Existujú 2 spôsoby, ako to dosiahnuť. 354 00:32:50,770 --> 00:32:56,310 Môžete to urobiť pomocou tradičnej binárne operátory. 355 00:32:56,310 --> 00:33:00,180 Takže neviete niekto rýchly a špinavý spôsob, ako to, že? 356 00:33:00,180 --> 00:33:07,650 To by mohlo v skutočnosti trvať minútu myslenia. Mám-li - 357 00:33:07,650 --> 00:33:12,130 Budem nastaviť problému sa, ako by sa opýtať. Takže ak som 2 premenné,, čo je len číslo 358 00:33:12,130 --> 00:33:17,800 že mi dajú, a súčet variabilný B, čo je ďalšie číslo, ktoré som rovnako. 359 00:33:17,800 --> 00:33:22,700 Takže ak som tieto 2 premenné, teraz chcem vymeniť je. 360 00:33:22,700 --> 00:33:31,550 Tradičné, pomocou pravidelné binárne operátory, myslím, rovnako ako +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Nie bitové operátory, ktoré pôsobia na binárne. 362 00:33:36,630 --> 00:33:39,600 Takže pomocou -, +, ÷, a všetci tí. 363 00:33:39,600 --> 00:33:52,980 Sme mohli vymeniť tým niečo ako = a + b, a, b = - b, = a - b 364 00:33:52,980 --> 00:34:04,260 Takže, zdravý rozum skontrolujte, a potom uvidíme, prečo to funguje. 365 00:34:04,260 --> 00:34:13,320 Povedzme = 7, b = 3, potom a + b bude 10. 366 00:34:13,320 --> 00:34:18,820 Takže sme teraz nastavenie = 10, a potom robíme b = a - b 367 00:34:18,820 --> 00:34:30,250 Takže robíme b = - b, ktorá bude 7, a b = - b znova, 368 00:34:30,250 --> 00:34:38,650 alebo = a - b Ktorá bude 10-7 čo je o 3. 369 00:34:38,650 --> 00:34:44,850 Takže teraz, správne, "" bolo 7, b je 3, a teraz b je 7 a 'a' je 3. 370 00:34:44,850 --> 00:34:48,679 Takže druh dáva zmysel, "" je kombináciou 2 čísel. 371 00:34:48,679 --> 00:34:53,000 V tomto bode, "" je kombinácia, a potom sme odpočítaním z pôvodnej b, 372 00:34:53,000 --> 00:34:56,860 a potom sme sa odpočíta to, čo bolo pôvodné "." 373 00:34:56,860 --> 00:35:01,150 Ale to nefunguje u všetkých čísel. 374 00:35:01,150 --> 00:35:08,880 Ak chcete vidieť, uvažujme systém, takže zvyčajne uvažujeme celé čísla ako 32 bitov. 375 00:35:08,880 --> 00:35:13,050 Poďme pracovať na niečom, čo je len ako 4 bity. 376 00:35:13,050 --> 00:35:15,450 Dúfam, že prísť s dobrým príkladom práve teraz. 377 00:35:15,450 --> 00:35:18,680 Takže, ja viem, to bude ľahké. 378 00:35:18,680 --> 00:35:26,720 Povedzme, že naše 2 čísla sú 1111, a 1111, takže sme v binárnom teraz. 379 00:35:26,720 --> 00:35:34,630 V aktuálnej desatinné miesta, ak chcete myslieť na to, že spôsob, = 15 a b = 15. 380 00:35:34,630 --> 00:35:37,630 A tak sme čakali, potom, čo sme ich swap - oni nemajú ani byť rovnaké čísla, 381 00:35:37,630 --> 00:35:41,140 ale ja som to takto. 382 00:35:41,140 --> 00:35:47,100 Poďme urobiť im nie je rovnaké čísla. Poďme urobiť 1111 a 0001. 383 00:35:47,100 --> 00:35:51,860 Tak = 15 a, b = 1. 384 00:35:51,860 --> 00:35:57,670 Potom, čo sme je swap, očakávame "" na 1 a b je 15. 385 00:35:57,670 --> 00:36:01,780 Takže prvým krokom je = a + b 386 00:36:01,780 --> 00:36:08,770 Naše čísla sú len 4 bity široký, takže "", čo je 1111, + b, ktorý je 0001, 387 00:36:08,770 --> 00:36:16,780 bude skončiť 10000, ale máme len 4 bity. 388 00:36:16,780 --> 00:36:22,540 Takže teraz = 0. 389 00:36:22,540 --> 00:36:34,080 A teraz chceme nastaviť b = a - b - v skutočnosti, to stále funguje perfektne. 390 00:36:34,080 --> 00:36:39,630 = A - b - uvidíme, či to funguje perfektne. 391 00:36:39,630 --> 00:36:53,720 Takže b = 0 - 1, čo by ešte 15, a potom = - b, ktorá by bola 1. 392 00:36:53,720 --> 00:36:56,210 Možno, že to funguje. 393 00:36:56,210 --> 00:36:59,020 Mám pocit, že je tu dôvod to nefunguje pomocou pravidelné. 394 00:36:59,020 --> 00:37:06,400 Dobre, takže práca na predpoklade, že nepracuje s pravidelnými binárnymi operáciami, 395 00:37:06,400 --> 00:37:15,040 a budem hľadať - budem Google, aby ste zistili, či je to pravda. 396 00:37:15,040 --> 00:37:23,490 Takže chceme urobiť pomocou bitovej operátormi, a záchytný bod tu je XOR. 397 00:37:23,490 --> 00:37:28,780 Takže, zavedenie XOR (^), ak ste ho ešte nevideli ešte. 398 00:37:28,780 --> 00:37:34,610 Je to opäť, prevádzkovateľ bitový, takže to pôsobí kúsok po kúsku, a to - 399 00:37:34,610 --> 00:37:39,910 Ak máte bity 0 a 1, potom to bude 1. 400 00:37:39,910 --> 00:37:45,230 Ak máte bity 1 a 0, bude to 1, máte bitov 0 a 0 to bude 0, 401 00:37:45,230 --> 00:37:47,640 a ak máte bity 1 a 1, že to bude 0. 402 00:37:47,640 --> 00:37:56,180 Takže je to ako OR. Ak je niektorý z bitov je pravda, je to 1, ale na rozdiel od OR, nemôže to byť obaja bity, ktoré sú pravdivé. 403 00:37:56,180 --> 00:37:59,320 ALEBO by to byť 1, by XOR mať to byť 0. 404 00:37:59,320 --> 00:38:02,250 Takže budeme chcieť použiť XOR tu. 405 00:38:02,250 --> 00:38:09,960 Zamyslite sa nad tým na chvíľu, ja idem na Google. 406 00:38:09,960 --> 00:38:16,230 No, nemôžete prečítať, že, som v súčasnej dobe na algoritme XOR odkladací stránke. 407 00:38:16,230 --> 00:38:21,340 Dúfajme, že to bude vysvetľovať, prečo Nemôžem - 408 00:38:21,340 --> 00:38:34,190 To je presne ten algoritmus, ktorý sme práve urobili. 409 00:38:34,190 --> 00:38:37,330 Stále nechápem, prečo - som musel len vybral zlý príklad, 410 00:38:37,330 --> 00:38:44,940 ale v tomto prípade, kedy "" sa stalo, aby sa stal 0, potom, čo dostal na 5 bitov, takže teraz '"je 0, 411 00:38:44,940 --> 00:38:48,730 to je to, čo sa nazýva "integer overflow." 412 00:38:48,730 --> 00:38:54,370 Podľa Wikipédie: "Na rozdiel XOR swapu, táto varianta vyžaduje, aby používa niektoré metódy 413 00:38:54,370 --> 00:38:59,780 zaručiť, že x + y nespôsobí pretečeniu celého čísla. " 414 00:38:59,780 --> 00:39:08,350 Tak to robí problémy, je to integer overflow, ale ja som robil niečo zle. 415 00:39:08,350 --> 00:39:10,520 Nie som si istý. Budem sa snažiť prísť s inou. 416 00:39:10,520 --> 00:39:13,640 [Študent] No, nie je integer overflow, keď sa snažíte dať číslo tam 417 00:39:13,640 --> 00:39:16,640 väčšie ako množstvo bitov, ktoré boli pridelené? 418 00:39:16,640 --> 00:39:23,730 Jo. Máme 4 bity. To je - mali sme 4 bity, sme potom skúste pridať 1 k nemu, a tak sme skončili s 5 bitov. 419 00:39:23,730 --> 00:39:26,690 Ale piaty bit len ​​dostane odrezať, jo. 420 00:39:26,690 --> 00:39:28,970 Mohlo by skutočne - 421 00:39:28,970 --> 00:39:33,010 [Študent] Znamená to, že hádzať vám chybu, alebo to robí - to by bolo hodiť chybu? 422 00:39:33,010 --> 00:39:40,720 Nie teda, že to žiadna chyba. Keď sa dostanete na úrovni zostavy, špeciálne bit 423 00:39:40,720 --> 00:39:47,020 niekde je nastaviť, aby povedal, že bol prepad, ale v C tak nejako jednoducho sa s tým vysporiadať. 424 00:39:47,020 --> 00:39:55,160 Vy vlastne nemôžete sa s tým vyrovnať, ak použijete špeciálny montážne návody v C. 425 00:39:55,160 --> 00:39:58,110 Poďme sa zamyslieť nad XOR swapu. 426 00:39:58,110 --> 00:40:02,220 A ja si myslím, že Wikipedia článok mohol tiež hovoril, že - 427 00:40:02,220 --> 00:40:07,310 Takže to tiež vychoval modulárny aritmetiku, takže myslím, že som bol, teoreticky, tým modulárny aritmetiku 428 00:40:07,310 --> 00:40:11,160 keď som povedal, že 0-1 je 15 znova. 429 00:40:11,160 --> 00:40:15,410 Takže, ktoré by mohli v skutočnosti - na pravidelné procesor, ktorý robí 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Vzhľadom k tomu, sme sa nakoniec na 0, odpočítame 1, tak potom to jednoducho zabalí späť k 1111. 431 00:40:20,430 --> 00:40:28,930 Takže tento algoritmus môže v skutočnosti pracovať, a + b, - b, b -;, ktoré by mohli byť v poriadku. 432 00:40:28,930 --> 00:40:34,030 Ale je tu niektoré procesory, ktoré nerobia to, a tak by nebolo v poriadku v týchto špecifických ty. 433 00:40:34,030 --> 00:40:39,880 XOR swapu bude fungovať na ľubovoľnom procesore. Dobre. 434 00:40:39,880 --> 00:40:42,280 Myšlienka je, že to má byť rovnaké, hoci. 435 00:40:42,280 --> 00:40:50,120 Kde sme pomocou XOR nejako získať informácie o ako do 1 premenných, 436 00:40:50,120 --> 00:40:54,120 a potom vytiahnite informácie o jednotlivých premenných znovu. 437 00:40:54,120 --> 00:41:04,330 Takže má niekto nápady / odpoveď? 438 00:41:04,330 --> 00:41:14,540 [Študent odpoveď, nezrozumiteľným] 439 00:41:14,540 --> 00:41:22,220 Takže by to malo fungovať, a tiež, XOR je komutatívnej. 440 00:41:22,220 --> 00:41:27,620 Bez ohľadu na to, ktorá, aby sa tieto 2 čísla stalo, že sa v tu, 441 00:41:27,620 --> 00:41:30,100 Tento výsledok sa bude rovnaká. 442 00:41:30,100 --> 00:41:35,800 Tak ^ b je b ^. 443 00:41:35,800 --> 00:41:51,860 Môžete tiež vidieť to písaný ako ^ = b, b ^ =, ^ = b znovu. 444 00:41:51,860 --> 00:42:00,200 Tak toto je správne, a prečo to funguje, myslím, že z kúskov. 445 00:42:00,200 --> 00:42:10,400 Pomocou neveľkého množstva, povedzme 11001, a 01100. 446 00:42:10,400 --> 00:42:12,790 Tak to je "", čo je b 447 00:42:12,790 --> 00:42:15,540 Tak ^ = b 448 00:42:15,540 --> 00:42:22,380 Budeme sa nastavenia 'A' = k XOR týchto 2 vecí. 449 00:42:22,380 --> 00:42:32,920 Takže 1 ^ 0 je 1, 1 ^ 1 je 0, 0 ^ 1 je 1, a 0 ^ 0 je 0, 1 ^ 0 je 1. 450 00:42:32,920 --> 00:42:37,380 Takže "," keď sa pozriete na desatinné číslo, to bude - 451 00:42:37,380 --> 00:42:41,160 nebudete vidieť veľa o vzťahu medzi pôvodným "A" a nový "," 452 00:42:41,160 --> 00:42:45,600 ale pri pohľade na kúsky, "" je teraz ako spleti informácií 453 00:42:45,600 --> 00:42:49,970 ako pôvodný "A" a pôvodné b. 454 00:42:49,970 --> 00:42:57,930 Takže ak vezmeme b ^, vidíme, že skončíme na originál "." 455 00:42:57,930 --> 00:43:08,910 A ak vezmeme v pôvodnej "" ^ nového "," vidíme, skončí na pôvodnú b 456 00:43:08,910 --> 00:43:18,380 Takže (^ b) ^ b = originál "." 457 00:43:18,380 --> 00:43:27,910 A (^ b) ^ = pôvodnej b 458 00:43:27,910 --> 00:43:37,010 Tam je - ďalší spôsob, ako vidieť to je niečo, XOR sám o sebe je vždy 0. 459 00:43:37,010 --> 00:43:45,020 Takže 1101 ^ 1101, všetky bity sa bude rovnaká. 460 00:43:45,020 --> 00:43:47,920 Takže sa to nikdy byť prípad, kedy 1 je 0, a druhý je 1. 461 00:43:47,920 --> 00:43:51,080 Tak toto je 0000. 462 00:43:51,080 --> 00:43:57,240 To isté s tým. (^ B) ^ b je ako ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) bude 0, ^ 0 je jednoducho bude "," pretože všetky bity sú 0. 464 00:44:03,680 --> 00:44:08,050 Takže jediné, ktoré sa chystáte byť tam, kde "" je pôvodne 1 - mal ty. 465 00:44:08,050 --> 00:44:12,070 A to isté nápad tu, som si celkom istý, že je to tiež komutatívnej. 466 00:44:12,070 --> 00:44:17,590 Jo. Povedal som pred tým to bolo komutatívnej. 467 00:44:17,590 --> 00:44:24,680 Znaky ^ "," a to je asociatívne, takže teraz (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 A my môžeme urobiť b ^ (^). 469 00:44:28,970 --> 00:44:31,540 A tak znova, dostaneme pôvodnú b 470 00:44:31,540 --> 00:44:37,120 Takže "" je teraz kombinácia 'a' a b dohromady. 471 00:44:37,120 --> 00:44:49,660 Pomocou našej novej combo "" hovoríme b = combo '"^ pôvodnej b, dostaneme pôvodné". " 472 00:44:49,660 --> 00:45:05,170 A teraz = combo '"^ nový b, čo bol pôvodný - alebo ktorý je teraz to, čo je" "alebo b 473 00:45:05,170 --> 00:45:13,620 To je v tomto prípade tu dole. To je = b, starý b 474 00:45:13,620 --> 00:45:16,550 Takže teraz je všetko opäť v poriadku vymenil. 475 00:45:16,550 --> 00:45:22,960 Ak sa skutočne pozrel na kúsky, b = a ^ b, bude XOR tieto 2, 476 00:45:22,960 --> 00:45:33,920 a odpoveď bude to, a potom = ^ b je XORing tieto 2 a odpoveď je táto. 477 00:45:33,920 --> 00:45:41,090 Otázky? Dobre. Takže posledný je trochu podstatne ťažšie. 478 00:45:41,090 --> 00:45:43,180 [Študent] Myslím, že je otázka o tom. >> Oh, ospravedlňujem sa. 479 00:45:43,180 --> 00:45:49,380 [Študent] Čo je to vlastne rýchlejší? Ak použijete tento XOR, alebo je to v prípade deklarovať novú premennú? 480 00:45:49,380 --> 00:45:55,190 Takže to, čo je vlastne rýchlejší, deklarovať novú premennú, alebo pomocou XOR vymeniť? 481 00:45:55,190 --> 00:45:59,600 Odpoveď je, so všetkou pravdepodobnosťou, dočasné premenné. 482 00:45:59,600 --> 00:46:05,780 A to je preto, že akonáhle to zostavujú sa - tak na úrovni zostavy, 483 00:46:05,780 --> 00:46:12,320 tam žiadna taká vec ako lokálne premenné alebo žiadne dočasné premenné alebo akejkoľvek z týchto vecí. 484 00:46:12,320 --> 00:46:16,060 Sú rovnako ako - tam je pamäť, a tam sú registre. 485 00:46:16,060 --> 00:46:20,920 Registre sú, kde sa veci aktívne deje. 486 00:46:20,920 --> 00:46:24,750 Nemusíte pridať 2 veci v pamäti, môžete pridať 2 veci v registroch. 487 00:46:24,750 --> 00:46:28,160 A vám prinesie veci z pamäti do registrov potom pridať, 488 00:46:28,160 --> 00:46:33,180 a potom môžete dať ich späť do pamäte, ale všetky akcie sa stane v registroch. 489 00:46:33,180 --> 00:46:38,750 Takže, keď ste pomocou dočasného premennej prístup, zvyčajne to, čo sa stane, je 490 00:46:38,750 --> 00:46:42,810 tieto 2 čísla sú už v registroch. 491 00:46:42,810 --> 00:46:46,570 A potom z toho bodu na, potom, čo ste vymenili je, 492 00:46:46,570 --> 00:46:51,540 to bude len začať používať iný register. 493 00:46:51,540 --> 00:46:56,510 Kdekoľvek ste boli pomocou b, bude to len používať register, ktorý bol už ukladania "." 494 00:46:56,510 --> 00:47:02,180 Takže to nemusí urobiť nič, čo by skutočne urobiť swap. Jo? 495 00:47:02,180 --> 00:47:05,690 [Študent] Ale to tiež zaberie viac pamäte, že jo? 496 00:47:05,690 --> 00:47:10,280 To bude trvať len viac pamäte, ak je potrebné uložiť túto dočasnú premennú. 497 00:47:10,280 --> 00:47:14,830 Ako keď neskôr použiť túto dočasnú premennú zase niekde, 498 00:47:14,830 --> 00:47:18,920 potom - alebo priradiť niečo k tomuto dočasné premenné. 499 00:47:18,920 --> 00:47:24,630 Takže ak v každom okamihu "," b v teplote majú odlišné hodnoty, alebo tak niečo, 500 00:47:24,630 --> 00:47:30,680 potom to bude mať odlišné umiestnenie v pamäti, ale je pravda, že 501 00:47:30,680 --> 00:47:34,800 existuje veľa lokálnych premenných, ktoré bude existovať len v registroch. 502 00:47:34,800 --> 00:47:44,370 V takom prípade, je to nikdy dať do pamäte, a tak ste nikdy strácať pamäť. 503 00:47:44,370 --> 00:47:58,620 Dobre. Posledná otázka je trochu viac. 504 00:47:58,620 --> 00:48:04,850 Takže tu, v tomto CS50 zariadení, je tu slovník. 505 00:48:04,850 --> 00:48:12,390 A dôvodom je to, že [? B66] je kontrola pravopisu, kde budete písať 506 00:48:12,390 --> 00:48:15,780 pomocou hash tabuľky alebo sa snaží, alebo nejaké dátové štruktúry. 507 00:48:15,780 --> 00:48:22,660 Budeš sa písať kontrolu pravopisu, a budete používať tento slovník k tomu, že. 508 00:48:22,660 --> 00:48:28,280 Ale pre tento problém, sme len bude vyzerať, aby sa pozrela, ak jediné slovo v slovníku. 509 00:48:28,280 --> 00:48:31,250 Takže miesto uloženia celého slovníka v niektorých dátové štruktúry 510 00:48:31,250 --> 00:48:35,180 a potom pozerá cez celý dokument, či sa niečo chybne, 511 00:48:35,180 --> 00:48:38,490 chceme len nájsť 1 slovo. Takže môžeme len skenovať cez celý slovník 512 00:48:38,490 --> 00:48:44,300 a ak nikdy nájsť slovo v celom slovníku, potom tam nebol. 513 00:48:44,300 --> 00:48:52,150 Ak sa skenovanie v celom slovníku a vidím slovo, potom sme v pohode, sme ho našli. 514 00:48:52,150 --> 00:48:56,580 Je tu hovorí, že chceme začať hľadať na súbor-funkcií pre spracovanie C je, 515 00:48:56,580 --> 00:48:59,930 pretože chceme, aby si slovník, 516 00:48:59,930 --> 00:49:07,680 ale dám si nápovedu tu, na ktoré funkcie by ste mali myslieť. 517 00:49:07,680 --> 00:49:11,510 Budem písať je na Spaces. 518 00:49:11,510 --> 00:49:20,490 Takže tie hlavné, že budete chcieť pozrieť na sú f otvorený a potom, nevyhnutne, f uzavretá, 519 00:49:20,490 --> 00:49:26,540 ktoré idú na konci programu, a f skenovanie f 520 00:49:26,540 --> 00:49:31,060 Dalo by sa tiež použiť f čítať, ale pravdepodobne nebudete chcieť 521 00:49:31,060 --> 00:49:34,200 preto, že - nemusíte skončiť potrebovať, že. 522 00:49:34,200 --> 00:49:41,880 F skenovanie f je to, čo budete používať na skenovanie cez slovník. 523 00:49:41,880 --> 00:49:46,370 A tak nemusíte kódovať roztok sa, nech to skúsi a ako pseudo-kód cestu 524 00:49:46,370 --> 00:50:05,200 k riešeniu, a potom budeme diskutovať. 525 00:50:05,200 --> 00:50:14,110 A vlastne, pretože som už dal si ty, keď idete do ľubovoľného terminálu alebo vášho spotrebiča shell, 526 00:50:14,110 --> 00:50:18,250 Ja by som - ja zvyčajne - ak ste ešte nevideli, ja neviem, či ste v triede, 527 00:50:18,250 --> 00:50:23,490 ale človek, takže manuálové stránky, sú veľmi užitočné pre hľadanie v skoro žiadne funkcie. 528 00:50:23,490 --> 00:50:27,330 Tak som si to, ako, MAN F, skenovanie f 529 00:50:27,330 --> 00:50:32,300 To je teraz informácie o rodine f skenovanie funkcií. 530 00:50:32,300 --> 00:50:37,070 Mohol by som tiež urobiť MAN F, otvorené, a že mi dáš detaily, ktoré. 531 00:50:37,070 --> 00:50:40,750 Takže ak viete, čo funkcia, ktorú používate, alebo ste čítanie kódu 532 00:50:40,750 --> 00:50:43,000 a vidíte nejakú funkciu a ste radi, "Čo to robí?" 533 00:50:43,000 --> 00:50:45,280 Len človek, ktorý názov funkcie. 534 00:50:45,280 --> 00:50:47,340 Existuje niekoľko podivných prípadov, kedy sa budete musieť povedať 535 00:50:47,340 --> 00:50:51,620 ako. man 2, že názov funkcie, alebo man 3, že názov funkcie, 536 00:50:51,620 --> 00:50:58,230 ale máte len k tomu, že ak človek názov funkcie sa tak nestane do práce prvýkrát. 537 00:50:58,230 --> 00:51:03,010 [Študent] Tak som čítania manuálové stránky pre otvorenú, ale ja som stále zmätená o tom, ako ju používať a programu. 538 00:51:03,010 --> 00:51:06,170 Dobre. Mnoho manuálových stránok sú menej ako užitočné. 539 00:51:06,170 --> 00:51:08,470 Sú viac užitočné, ak už viete, čo robia 540 00:51:08,470 --> 00:51:12,670 a potom stačí si pamätať poradí argumentov, alebo tak niečo. 541 00:51:12,670 --> 00:51:17,640 Alebo sa vám môže dať všeobecný prehľad, ale niektoré z nich sú veľmi zdrvujúce. 542 00:51:17,640 --> 00:51:22,220 Rovnako ako f skenovanie f, tiež. To vám dáva informácie o všetkých týchto funkcií, 543 00:51:22,220 --> 00:51:28,120 a 1 riadok dole tu stane povedať, "F skenovanie f číta reťazec bodu alebo potok." 544 00:51:28,120 --> 00:51:32,360 Ale f otvoriť. Tak, ako by sme používať f open? 545 00:51:32,360 --> 00:51:38,470 Myšlienka programu, ktorý potrebuje urobiť súbor I / O je, že 546 00:51:38,470 --> 00:51:45,070 musíte najprv otvoriť súbor, ktorý chcete robiť veci, a nevyhnutne, 547 00:51:45,070 --> 00:51:51,220 čítať veci z tohto súboru a robiť veci s nimi. 548 00:51:51,220 --> 00:51:55,350 F otvorená, je to, čo sme použiť na otvorenie súboru. 549 00:51:55,350 --> 00:52:04,190 Tá vec sa vrátime, tak to, čo súbor chceme otvoriť, to nám dáva - 550 00:52:04,190 --> 00:52:11,970 tu sa hovorí "/ user / share / dict / words." 551 00:52:11,970 --> 00:52:16,740 To je súbor, ktorý chceme otvoriť, a chceme ho otvoriť - 552 00:52:16,740 --> 00:52:21,440 musíme explicitne zadať, či chceme otvoriť ju prečítať, alebo ak chceme ho otvoriť písať. 553 00:52:21,440 --> 00:52:26,490 Je tu pár kombinácií a tak, ale chceme to otvoriť na čítanie. 554 00:52:26,490 --> 00:52:29,380 Chceme čítať zo súboru. 555 00:52:29,380 --> 00:52:34,290 Takže to, čo robí tento návrat? Vracia súboru hviezdičku (*), 556 00:52:34,290 --> 00:52:37,260 a ja si len ukázať všetko v premennej f, tak *, 557 00:52:37,260 --> 00:52:40,840 znova, je to ukazovateľ, ale nechceme sa zaoberať s ukazovateľmi. 558 00:52:40,840 --> 00:52:46,470 Môžete myslieť na f as, f je teraz premenná, ktorú budete používať na reprezentáciu súboru. 559 00:52:46,470 --> 00:52:49,850 Takže ak si chcete prečítať zo súboru, môžete si od f 560 00:52:49,850 --> 00:52:54,820 Ak chcete zatvoriť súbor, zatvorte f 561 00:52:54,820 --> 00:53:00,350 Takže na konci programu, keď sme nevyhnutne chcete zatvoriť súbor, čo by sme mali urobiť? 562 00:53:00,350 --> 00:53:06,750 Chceme ukončiť f 563 00:53:06,750 --> 00:53:12,600 Takže teraz posledný súbor funkcie, ktoré budeme chcieť použiť, je skenovanie f, f skenovanie f 564 00:53:12,600 --> 00:53:20,930 A čo to robí, je to skenuje cez súbor hľadá vzor, ​​aby zodpovedal. 565 00:53:20,930 --> 00:53:39,100 Pri pohľade na manuálové stránke tu, vidíme int f skenovanie f, ignorovať návratové hodnoty pre teraz. 566 00:53:39,100 --> 00:53:45,230 Prvý argument je súbor * stream, takže prvý argument budeme chcieť odovzdať, je f 567 00:53:45,230 --> 00:53:47,900 Sme skenovanie cez f 568 00:53:47,900 --> 00:53:53,680 Druhý argument je formátovací reťazec. 569 00:53:53,680 --> 00:53:58,310 Dám vám formátovací reťazec teraz. 570 00:53:58,310 --> 00:54:05,180 Myslím, že sme sa náhodou povedať, 127s \ n, veľa z toho je zbytočné. 571 00:54:05,180 --> 00:54:12,490 Myšlienka na to, čo tento formát je reťazec, je, že môžete myslieť na f skenovanie ako protiklad tlačovej f 572 00:54:12,490 --> 00:54:17,160 Takže tlač f, tlač f môžeme tiež použiť tento typ formátu parametra, 573 00:54:17,160 --> 00:54:25,000 ale v tlačovej f, čo robíme, je - poďme sa pozrieť na ekvivalentu. 574 00:54:25,000 --> 00:54:32,550 Takže tlačiť f, a je to vlastne aj f f tlač, kde prvý argument je bude f 575 00:54:32,550 --> 00:54:40,980 Pri tlači f, dalo by sa povedať niečo ako, "tlač 127s \ n", a potom, ak sme sa prejsť to nejaký reťazec, 576 00:54:40,980 --> 00:54:44,050 to bude tlačiť tento reťazec a potom nový riadok. 577 00:54:44,050 --> 00:54:49,690 Čo znamená 127, som si celkom istý, ale nikdy som obmedzený som na to, 578 00:54:49,690 --> 00:54:52,470 Tie by ani potrebné hovoriť 127 "v tlačovej f, 579 00:54:52,470 --> 00:54:57,090 ale to, čo to znamená, je vytlačiť prvých 127 znakov. 580 00:54:57,090 --> 00:54:59,350 Takže som si istý, že je to tento prípad. Môžete Googlu za to. 581 00:54:59,350 --> 00:55:03,000 Ale v budúcej Som takmer istá, znamená to, že. 582 00:55:03,000 --> 00:55:08,880 Tak toto je vytlačiť prvých 127 znakov, nasleduje nový riadok. 583 00:55:08,880 --> 00:55:14,680 F skenovanie f teraz, namiesto toho, aby pri pohľade na premenné a jeho tlač, 584 00:55:14,680 --> 00:55:22,620 to bude vyzerať na nejakom reťazci, a uložte vzor do premennej. 585 00:55:22,620 --> 00:55:26,360 Poďme vlastne použiť skenovanie f v inom príklade. 586 00:55:26,360 --> 00:55:31,670 Takže povedzme, že sme mali nejaké int, x = 4, 587 00:55:31,670 --> 00:55:41,110 a chceli sme vytvoriť reťazec vyrobený z - chcel vytvoriť reťazec 588 00:55:41,110 --> 00:55:44,250 to bolo ako, to príde až oveľa neskôr, 589 00:55:44,250 --> 00:55:49,020 niečo, čo je rovnako ako 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Takže to môže byť program, kde budete mať súčet čítač, 591 00:55:51,870 --> 00:55:56,420 Celkovo proti i, a chcete ušetriť veľa obrázkov. 592 00:55:56,420 --> 00:56:02,430 Takže chcete ušetriť I.jpg, kde i je niektorí iterácia vašej slučky. 593 00:56:02,430 --> 00:56:05,500 Tak ako sme sa túto reťazec pre túto JPEG? 594 00:56:05,500 --> 00:56:11,720 Ak by ste chceli vytlačiť 4.jpg, mohli by sme jednoducho povedať, tlač f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 a potom by vytlačiť pre tento JPEG. 596 00:56:14,410 --> 00:56:20,050 Ale ak chceme zachrániť reťazca 4.jpg, používame skenovanie f 597 00:56:20,050 --> 00:56:30,860 Takže string s - vlastne sme nemôžem - znak, char s, poďme 100. 598 00:56:30,860 --> 00:56:35,400 Tak som deklaroval nejakú ponuku 100 znakov, 599 00:56:35,400 --> 00:56:39,830 a to je to, čo sme nevyhnutne bude ukladanie tohto JPEG a 600 00:56:39,830 --> 00:56:47,920 Takže budeme používať skenovanie f, a formát, ako by sme povedali% d.jpg 601 00:56:47,920 --> 00:56:54,980 aby bolo možné tlačiť 4.jpg, formát to bude% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Takže je formát% d.jpg, čo chceme nahradiť% d s je x, 603 00:57:04,020 --> 00:57:06,590 a teraz musíme uložiť tento reťazec niekde. 604 00:57:06,590 --> 00:57:12,500 A kde budeme ukladať tento reťazec je pole s 605 00:57:12,500 --> 00:57:21,640 Takže po tomto riadku kódu, s, ak budeme tlačiť f,% ​​s variabilnou s, 606 00:57:21,640 --> 00:57:26,280 to bude tlačiť 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Takže f skenovanie f je rovnaký ako skenovanie f, s výnimkou teraz to vyzerá na tento súbor 608 00:57:38,930 --> 00:57:43,600 za to, čo pre ukladanie v §. 609 00:57:43,600 --> 00:57:46,160 To je to, čo je posledný argument bude. 610 00:57:46,160 --> 00:57:54,170 Chceme uložiť - "Scan f rodinu funkcie preverovanie ako podľa formátu snažil nižšie. 611 00:57:54,170 --> 00:58:02,450 Ak niektorý sú uložené v umiestnení bodov, ktoré môže vrátiť - " 612 00:58:02,450 --> 00:58:12,910 Nie, môžeme byť dobré. Nechajte ma premýšľať o sekundu. 613 00:58:12,910 --> 00:58:26,350 Takže skenovanie f nie je - čo to sakra je funkcia, ktorá robí, že? 614 00:58:26,350 --> 00:58:31,650 Takže skenovanie f nebude, aby sa celé číslo, a to bodka JPG. 615 00:58:31,650 --> 00:58:43,490 Bude to [Mumbles]. 616 00:58:43,490 --> 00:58:49,360 Uložiť int premenné v reťazci int C. 617 00:58:49,360 --> 00:58:55,940 Čo je táto premenná, alebo to, čo je táto funkcia volá? 618 00:58:55,940 --> 00:59:04,950 Áno. To je - áno. Takže to, čo som bol vymedzenie vám bolo skôr s print f, 619 00:59:04,950 --> 00:59:09,820 ktoré - ktoré dáva oveľa väčší zmysel, prečo som povedal, to bolo oveľa viac ako tlačové f 620 00:59:09,820 --> 00:59:14,700 Scan f je stále niečo ako tlačové f, ale s print f bude skenovať ju 621 00:59:14,700 --> 00:59:17,510 a nahradiť premenné a teraz uložte ho v reťazci. 622 00:59:17,510 --> 00:59:19,620 Miesto tlače to, uloží ho v reťazci. 623 00:59:19,620 --> 00:59:25,070 Takže ignorovať úplne. Stále môžete myslieť špecifikátory formátu ako takého tlačového f 624 00:59:25,070 --> 00:59:34,510 Takže teraz, keď sme chceli urobiť 4.jpg vec, že ​​my s Print F, X tohto. 625 00:59:34,510 --> 00:59:38,520 Takže to, čo skenovanie f robí - čo sa vaša otázka bude? 626 00:59:38,520 --> 00:59:40,820 [Študent] Som len zmätená o tom, čo sa snažíme robiť tu 627 00:59:40,820 --> 00:59:43,450 s týmto JPEG. Môžete mi vysvetliť, že 1 viac času? 628 00:59:43,450 --> 00:59:52,710 Tak to bolo - to je menej relevent až f skenovanie f teraz, dúfajme, že sa to viazať znovu v nejakom spôsobe. 629 00:59:52,710 --> 01:00:02,240 Ale to, čo som pôvodne mala v úmysle ukázať sa - je to vlastne priamo súvisí s týmito [? F5] 630 01:00:02,240 --> 01:00:08,520 Budete používať s Print f, kde, že máme 100 obrázkov, 631 01:00:08,520 --> 01:00:13,630 a chcete prečítať disk 1.jpg 2.jpg, 3.jpg,. 632 01:00:13,630 --> 01:00:21,520 Tak, aby sa to, že budete musieť F Otvorte, a potom sa budete musieť prejsť v reťazci, ktorý chcete otvoriť. 633 01:00:21,520 --> 01:00:30,020 Takže by sme chceli otvoriť 1.jpg, s cieľom vytvoriť reťazec, ktorý je 1.jpg, 634 01:00:30,020 --> 01:00:37,660 robíme s print f z% d.jpg--sme neurobili pre int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Takže s print f% d.jpg I. 637 01:00:51,130 --> 01:00:56,320 Takže po tejto linke, teraz premenná alebo pole s bude 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Alebo, 0.jpg, 1.jpg, 2.jpg. A tak môžeme otvoriť, zase, každý obraz pre čítanie. 639 01:01:10,610 --> 01:01:19,550 Takže to je to, čo je vytlačiť f robí. Páči sa vám, čo s tlačiť f je teraz robí? 640 01:01:19,550 --> 01:01:25,720 [Študent] Dobre, takže to trvá - vytvára reťazec, something.jpg, a uloží ho. 641 01:01:25,720 --> 01:01:30,360 Áno. Vytvára - to je iný formát reťazca, rovnako ako f skenovania a tlače f, 642 01:01:30,360 --> 01:01:37,530 kde sa vloží všetky premenné do druhej tvrdenie, by mohlo byť to na rozdiel od i 643 01:01:37,530 --> 01:01:42,280 Snáď - myslím, že je to prípad. Ale nech už poradí argumentov je. 644 01:01:42,280 --> 01:01:45,440 Bude to vložiť všetky premenné do formátu reťazca 645 01:01:45,440 --> 01:01:52,250 a potom uložiť do našej pamäti, hovoríme, že vyrovnávacia pamäť, je to, kde sme uloženie reťazec. 646 01:01:52,250 --> 01:02:00,750 Takže sme sa skladovanie vnútri S správne-formátovaný reťazec, čo% d bola nahradená 4. 647 01:02:00,750 --> 01:02:08,080 [Študent] Takže ak sme to urobili, je premenná f jednoducho bude prevelená? 648 01:02:08,080 --> 01:02:18,110 Áno. Takže by sme mali uzavrieť pôvodné f pred vykonaním tohto. 649 01:02:18,110 --> 01:02:22,810 Ale - a potom tiež, keby nebolo f otvoriť tu, potom by sme mali hovoriť - 650 01:02:22,810 --> 01:02:29,280 Jo. Ale to by otvorilo sto rôznych súborov. 651 01:02:29,280 --> 01:02:37,360 [Študent] Ale my by sme neboli schopní pristupovať alebo - v poriadku. 652 01:02:37,360 --> 01:02:44,230 Dobre. Takže skenovanie f, f skenovanie f, je druh rovnaké myšlienky, 653 01:02:44,230 --> 01:02:53,610 ale namiesto toho, miesto uloženia do reťazca, je to skôr ako teraz 654 01:02:53,610 --> 01:03:02,420 ísť cez bodnutie a vzor zodpovedajúce proti tomuto reťazcu a ukladanie výsledkov do premenných. 655 01:03:02,420 --> 01:03:11,290 Môžete použiť skenovanie f analyzovať nad niečím ako 4.jpg, a uložiť celé číslo 4 do x súčet int. 656 01:03:11,290 --> 01:03:13,430 To je to, čo môžeme použiť skenovanie f pre. 657 01:03:13,430 --> 01:03:16,300 F skenovanie f je robiť, že na príkazovom riadku. 658 01:03:16,300 --> 01:03:19,200 Som vlastne celkom istý, že toto je to, čo knižnica CS50 robí. 659 01:03:19,200 --> 01:03:29,050 Takže keď hovoríte, "dostať int," to je skenovanie f-ing po - scan f je spôsob, ako dostať vstup od užívateľa. 660 01:03:29,050 --> 01:03:34,670 F skenovanie f bude robiť to isté, ale pomocou súboru na skenovanie cez. 661 01:03:34,670 --> 01:03:41,090 Tak tu sme sa skenovanie cez tento súbor. 662 01:03:41,090 --> 01:03:45,460 Vzor sa snažíme, aby zodpovedali určitej reťazec, ktorý je 127 znakov 663 01:03:45,460 --> 01:03:48,100 nasleduje nový riadok 664 01:03:48,100 --> 01:03:54,770 Takže som si istá, že by sme mohli dokonca len povedať, "odpovedá s," pretože v slovníku 665 01:03:54,770 --> 01:03:57,770 máme sa stalo, že, my sme zaručená žiadne slovo je tak dlho, 666 01:03:57,770 --> 01:04:03,310 a tiež f skenovanie f, myslím, sa zastaví na novom riadku bez ohľadu na to, čo. 667 01:04:03,310 --> 01:04:06,970 Ale budeme zahŕňať nový riadok v zápase, a - 668 01:04:06,970 --> 01:04:13,960 [Študent] Ak by sme nemali obsahovať nový riadok, nebolo by to nájsť časti slova? 669 01:04:13,960 --> 01:04:22,900 Je - každá - pri pohľade na slovníku - 670 01:04:22,900 --> 01:04:26,200 Takže v slovníku, sú všetky naše slová. 671 01:04:26,200 --> 01:04:30,500 Každý z nich je na novom riadku. 672 01:04:30,500 --> 01:04:32,510 F skenovanie bude vyzdvihnúť toto slovo. 673 01:04:32,510 --> 01:04:38,750 Ak sa nezahŕňajú nový riadok, potom je možné, že budúci skenovanie f bude len čítať nový riadok. 674 01:04:38,750 --> 01:04:44,180 Ale vrátane nového riadku potom bude jednoducho ignorovať nový riadok. 675 01:04:44,180 --> 01:04:49,440 Ale my nikdy dostať časť slova, pretože sme vždy čítania až na nový riadok, bez ohľadu na to, čo. 676 01:04:49,440 --> 01:04:54,530 [Študent] Ale čo keď ste vyhľadať slovo "Cissa," ako Cissa. 677 01:04:54,530 --> 01:04:57,380 Bude to nájsť to, a hovoriť, že je to zápas? 678 01:04:57,380 --> 01:05:05,110 Tak tu - to bude čítať v - je to vlastne dobrý bod. 679 01:05:05,110 --> 01:05:10,660 My sa nikdy používať existujúce - slovo, ktoré hľadáte, je prvý argument na príkazovom riadku. 680 01:05:10,660 --> 01:05:16,460 Takže string, slovo = ArGV 1. 681 01:05:16,460 --> 01:05:20,020 Takže reťazec hľadáme, je ArGV 1. 682 01:05:20,020 --> 01:05:23,290 Nie sme hľadať slovo vôbec v našom skenovanie f 683 01:05:23,290 --> 01:05:28,030 To, čo sme robili so skenovacím f je stále každé slovo v slovníku, 684 01:05:28,030 --> 01:05:34,320 a potom ešte raz máme, že slovo ideme použiť strcmp porovnať ich. 685 01:05:34,320 --> 01:05:39,210 Budeme porovnávať naše slovo a to, čo sme práve prečítali dovnútra 686 01:05:39,210 --> 01:05:45,110 Takže nevyhnutne, budeme nakoniec robiť veľa skenovanie fs 687 01:05:45,110 --> 01:05:52,130 kým to len tak sa stane, že scan f vráti - 688 01:05:52,130 --> 01:05:54,800 vráti jeden, tak dlho, ako to bolo uzatvorené nové slovo, 689 01:05:54,800 --> 01:06:01,360 a vráti niečo iné, akonáhle to nedržal slovo. 690 01:06:01,360 --> 01:06:08,440 Čítame v celom slovníku, skladovanie riadok po riadku každé slovo do premennej s 691 01:06:08,440 --> 01:06:17,240 Potom sme sa porovnaním slovo s s, a v prípade, že porovnanie == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp stane, aby 0, ak zápas bol vyrobený. 693 01:06:21,650 --> 01:06:31,510 Takže ak to bolo 0, potom môžeme vytlačiť f, uzavreté, 694 01:06:31,510 --> 01:06:35,370 alebo slovo v slovníku, alebo čo chcete tlačiť f 695 01:06:35,370 --> 01:06:41,450 A potom - my nechceme f zavrieť znova a znova. 696 01:06:41,450 --> 01:06:50,410 To je ten druh vecí, čo chceme urobiť, a my nie sme len hľadáte slovo v slovníku. 697 01:06:50,410 --> 01:06:56,660 Takže by sme mohli urobiť to, že ak by sme sa chceli pozrieť na ich vzoru, Cissa, ako si hovoril predtým, 698 01:06:56,660 --> 01:07:00,260 ak by sme chceli hľadať za týmto vzorom, potom by to zlyhanie v prípade 699 01:07:00,260 --> 01:07:08,010 pretože to nie je vlastne slovo, ale jedno zo slov v slovníku sa stane, že, že v ňom. 700 01:07:08,010 --> 01:07:13,560 Tak to by zodpovedalo toto slovo, ale to podmnožina slova nie je slovo samo o sebe. 701 01:07:13,560 --> 01:07:17,250 Ale to nie je, ako sme používať, budeme čítať v každom slove 702 01:07:17,250 --> 01:07:19,740 a následné porovnanie slovo máme s týmto slovom. 703 01:07:19,740 --> 01:07:25,780 Takže sme stále nákupný plných slov. 704 01:07:25,780 --> 01:07:29,620 Môžem odoslať definitívne riešenie neskôr. 705 01:07:29,620 --> 01:07:32,050 To je druh takmer na správnu odpoveď, myslím. 706 01:07:32,050 --> 01:07:34,720 [Študent komentár, nezrozumiteľným] 707 01:07:34,720 --> 01:07:40,870 Oh, som sa zbaviť skôr, než? Char s, myslím, že sme si povedali, 127 - zabudol som, čo najväčší je. 708 01:07:40,870 --> 01:07:44,100 Budeme jednoducho robiť 128, takže teraz je dosť dlhá. 709 01:07:44,100 --> 01:07:46,570 Nepotrebujeme tlačiť čokoľvek. 710 01:07:46,570 --> 01:07:56,440 Sme tiež bude chcieť bude musieť ukončiť svoju súbor, a ktoré by mali byť o správnu odpoveď. 711 01:07:56,440 --> 01:07:59,440 CS50.TV