1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] § Harjoitus 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Harvardin yliopisto 3 00:00:04,910 --> 00:00:07,410 Tämä on CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Joten, olen Rob. Olen vanhempi Kirkland. Tämä on kolmas vuosi TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Se on ensimmäinen kerta, kun olemme muuttumassa perinteisestä luento-tyylinen kappale, 6 00:00:22,220 --> 00:00:25,610 jos me vain eräänlainen katsaus mitä tapahtui luento ja sitten te kysyä kysymyksiä, 7 00:00:25,610 --> 00:00:32,250 nyt on paljon enemmän ongelmalähtöinen, jossa käytämme tilat, ja - 8 00:00:32,250 --> 00:00:37,410 Voi, niin ajatus on mennä, että linkin Minä olen lähettänyt teidät ja sitten voit olla minun Space. 9 00:00:37,410 --> 00:00:42,410 Onko kellään ole kannettavaa tietokonetta? Okei. 10 00:00:42,410 --> 00:00:47,050 Joten aiomme käyttää tätä, ja aiomme tehdä ongelmien elää osiossa 11 00:00:47,050 --> 00:00:50,740 ja keskustella niistä ja mietitään mikä hätänä 12 00:00:50,740 --> 00:00:56,390 ja voisin vetää joitakin koodin, ja voisin keskustella ideoista. 13 00:00:56,390 --> 00:01:02,140 Joten onko kukaan ollut vaikeuksia? 14 00:01:02,140 --> 00:01:07,000 Voit keskustella puolella, en tiedä, jos meillä on syy. 15 00:01:07,000 --> 00:01:12,270 Nyt, kuten edellinen supersection, jos olisit tuossa luokassa, tiedät mitä se on noin. 16 00:01:12,270 --> 00:01:19,200 Kaikissa P settiä siellä tulee olemaan näiden osia. 17 00:01:19,200 --> 00:01:22,550 Joten P-sarja 2, tekniset, kai näit sen P-set 1 jo. 18 00:01:22,550 --> 00:01:27,400 Mutta voimme tarkastella P-sarja 2 mitä aiomme olla ylittämättä tänään. 19 00:01:27,400 --> 00:01:29,460 Ja näet osan kysymyksistä. 20 00:01:29,460 --> 00:01:37,530 Joten tämä tulee olemaan kaikki P-sarjat; siellä tulee olla osa kysymyksiä. 21 00:01:37,530 --> 00:01:41,340 Toistaiseksi olemme sanoneet, "Mieti tätä tilaisuutta harjoitella." 22 00:01:41,340 --> 00:01:44,940 Sinua ei pyydetä esittämään tätä ohjelmaa. 23 00:01:44,940 --> 00:01:48,480 Ajatus on, että nämä on tarkoitus sellainen auttaa pääsemään alkuun Harjoitus. 24 00:01:48,480 --> 00:01:53,220 Luulen päälle Hacker painos, monet heistä on tarkoitus vain olla uusia, mielenkiintoisia asioita oppia. 25 00:01:53,220 --> 00:01:58,590 Ne eivät saa olla suoraan sovellettavissa ongelmaan asetettu. 26 00:01:58,590 --> 00:02:01,810 Ja nyt emme ottaa lähetät heidät, mutta teoriassa, 27 00:02:01,810 --> 00:02:07,480 myöhemmin ongelma asetetaan, saatat lähettää ne, ja näin voit joko tulla § 28 00:02:07,480 --> 00:02:10,380 tai katsella osiossa saada vastauksia, tai voit vain saada ne omalle 29 00:02:10,380 --> 00:02:16,350 jos ei huvita nauttia olotila. 30 00:02:16,350 --> 00:02:21,010 Joten - Mielestäni tämä on ensimmäinen. 31 00:02:21,010 --> 00:02:29,280 Oh. Myös näissä kohdissa kysymyksiä meillä on myös kysyt kysymyksiä shortsit. 32 00:02:29,280 --> 00:02:33,440 Joten kai teoriassa, sinun pitäisi katsella näitä ennen tuloaan §, 33 00:02:33,440 --> 00:02:38,550 mutta se on hienoa, jos et, menemme yli niitä joka tapauksessa. 34 00:02:38,550 --> 00:02:42,590 Joten voimme aloittaa näillä: "Miten while-silmukka eroaa do-while-silmukka? 35 00:02:42,590 --> 00:02:46,210 Kun on jälkimmäinen erityisen hyödyllistä? " 36 00:02:46,210 --> 00:02:49,390 Joten kellään mitään -? 37 00:02:49,390 --> 00:02:52,730 [Opiskelija] do-while-silmukka aina suorittaa vähintään kerran. 38 00:02:52,730 --> 00:03:02,950 Kyllä. Niin, että on ero. While-silmukka - Minä vain tehdä sen täällä - kun silmukka, olemme kunnossa 39 00:03:02,950 --> 00:03:19,760 täällä taas tee-aikaa, sinulla ei ole kunnossa kunnes saamme tänne. 40 00:03:19,760 --> 00:03:24,130 Ja niin, kun ohjelman täytäntöönpanosta, ja se pääsee taas silmukka, 41 00:03:24,130 --> 00:03:26,380 se välittömästi tarkistaa, jos tämä ehto on tosi. 42 00:03:26,380 --> 00:03:30,710 Jos tämä ehto ei ole totta, se vain ohittaa silmukan kokonaan. 43 00:03:30,710 --> 00:03:34,390 Do-while-silmukka, koska ohjelma on täytäntöönpanovaltiossa, se saa "tehdä." 44 00:03:34,390 --> 00:03:37,920 Mitään ei tapahdu tässä vaiheessa, vain jatkaa suorittamista. 45 00:03:37,920 --> 00:03:42,690 Sitten kun se osuu "taas" jos ehto on tosi, se tulee silmukka takaisin ja tehdä se uudestaan 46 00:03:42,690 --> 00:03:46,730 ja uudestaan ​​ja uudestaan, kunnes ehto ei ole totta, ja sitten vain kuuluu läpi. 47 00:03:46,730 --> 00:03:50,600 Niin, eron ollessa, että tämä voidaan hypätä suoraan alusta alkaen. 48 00:03:50,600 --> 00:03:56,770 Tämä väistämättä suorittaa kerran ja sitten voi suorittaa useampaan kertaan, jos ehto on edelleen tosi. 49 00:03:56,770 --> 00:04:03,720 Joten vaikka silmukka tehdä vain sen kerran, tai - kun silmukka - meidän ei ehkä tarvitse tehdä sitä ollenkaan, 50 00:04:03,720 --> 00:04:07,900 sillä heti kun saamme sen, jos ehto on epätosi, me vain hypätä suoraan sen yli. 51 00:04:07,900 --> 00:04:11,770 Katsoo do-while-silmukka, me suorittaa sen kerran, välttämättä. 52 00:04:11,770 --> 00:04:14,560 Sitten, kun pääsemme kunnossa, tarkista onko se totta vai tarua. 53 00:04:14,560 --> 00:04:19,790 Jos se on totta, teemme sen uudestaan, jos se on väärä, me vain edelleen menossa. 54 00:04:19,790 --> 00:04:24,680 Joten kun on jälkimmäinen erityisen hyödyllistä? 55 00:04:24,680 --> 00:04:31,190 Voin siis sanoa, että kokonaisuudessaan 4 vuotta, 3 vuotta, riippumatta, 56 00:04:31,190 --> 00:04:38,780 että olen ohjelmointia, olen käyttänyt tätä, kuten, alle 10 kertaa. 57 00:04:38,780 --> 00:04:43,140 Ja luultavasti 5 niistä ovat CS50 kun otamme käyttöön do-while silmukoita. 58 00:04:43,140 --> 00:04:47,510 Joten kun teet käytetään tee-ja silmukoita? 59 00:04:47,510 --> 00:04:49,510 Kun on - joo? 60 00:04:49,510 --> 00:04:53,180 [Opiskelija] Kun yrität saada käyttäjä syöttää, tai jotain haluat tarkistaa - 61 00:04:53,180 --> 00:04:59,700 Joo. Niin-ja silmukoita, käyttäjä syöttää on iso. 62 00:04:59,700 --> 00:05:03,160 Siksi ensimmäisenä pari ongelmaa sarjaa, kun haluat kysyä käyttäjälle, kuten, 63 00:05:03,160 --> 00:05:08,520 "Anna minulle merkkijono," et voi jatkaa, kunnes saat että merkkijono. 64 00:05:08,520 --> 00:05:12,980 Ja niin te välttämättä, täytyy kysyä merkkijonon ainakin kerran. 65 00:05:12,980 --> 00:05:16,950 Mutta sitten jos ne vastaavat jotakin pahaa, niin sinun täytyy silmukka takaisin ja kysy uudestaan. 66 00:05:16,950 --> 00:05:20,810 Mutta muut kuin käyttäjän syötettä, se on hyvin harvinaista, että olen kohtaavat tapaus 67 00:05:20,810 --> 00:05:27,170 minne haluan loop "ainakin kerran", mutta ehkä enemmän. 68 00:05:27,170 --> 00:05:33,370 Kysymyksiä tai -? Onko kukaan käyttänyt do-while-silmukka muualla? 69 00:05:33,370 --> 00:05:36,780 Okei. Joten seuraava on "Mitä pimeän tunnus 70 00:05:36,780 --> 00:05:43,310 yleensä ilmoittaa jos ulostulevien kalahtaa? " 71 00:05:43,310 --> 00:05:47,380 Millainen koodin voisin kirjoittaa saada "pimeän tunniste? ' 72 00:05:47,380 --> 00:05:49,550 [Student], että x = 2? 73 00:05:49,550 --> 00:05:52,650 Joten voimme vain kokeilla sitä täällä, x = 2. 74 00:05:52,650 --> 00:06:04,830 Me suorittaa tämän - oh, en osoita sitä. Joten tässä saamme - kaikki hyvin. 75 00:06:04,830 --> 00:06:07,100 "Käytä pimeän tunnisteen x." 76 00:06:07,100 --> 00:06:11,610 Niin, että pimeä tunniste muuttuja. 77 00:06:11,610 --> 00:06:13,910 Se usein kutsuvat muuttujan tunniste. 78 00:06:13,910 --> 00:06:17,300 Joten se ei ehkä tiedä se on todella vaihteleva, se ei tiedä, mitä se on. 79 00:06:17,300 --> 00:06:19,380 Joten se on tunniste. 80 00:06:19,380 --> 00:06:26,060 Joten miksi se pimeää? Joo. 81 00:06:26,060 --> 00:06:32,190 Joten on selvää terminologiasta, ilmoitus muuttujan 82 00:06:32,190 --> 00:06:37,360 on, kun sanot "int x" tai "string y," mitä tahansa. 83 00:06:37,360 --> 00:06:41,910 Alustuksen muuttuja, tai tehtävän muuttujan, 84 00:06:41,910 --> 00:06:44,510 on aina sanoa "x = 2". 85 00:06:44,510 --> 00:06:52,950 Joten voimme tehdä näitä erillisinä vaiheina, int x, x = 2, ja kunnes - voimme olla nippu tavaraa täällä - 86 00:06:52,950 --> 00:07:00,350 mutta ennen tätä linjaa tapahtuu, x on edelleen alustamattoman, mutta se on ilmoitettu. 87 00:07:00,350 --> 00:07:06,760 Ja jotta voimme tietenkin tehdä sen 1 rivi, ja nyt olemme julistaa ja alustetaan. 88 00:07:06,760 --> 00:07:10,730 Kysymyksiä? 89 00:07:10,730 --> 00:07:18,390 Ja lopuksi: "Miksi Caesar Cipher ole kovin turvallinen?" 90 00:07:18,390 --> 00:07:23,830 Joten ensimmäinen, ei kukaan halua sanoa, mitä keisarille Cipher on? 91 00:07:23,830 --> 00:07:28,100 [Student] Caesar Cipher vain on, että voit kartoittaa, voit siirtää jokaiseen kirjeeseen, 92 00:07:28,100 --> 00:07:34,420 tietty määrä kirjeitä mennä yli, ja muuttaa takaisin päälle, ja se ei ole kovin turvallinen, koska 93 00:07:34,420 --> 00:07:42,260 on vain 26 mahdollisia vaihtoehtoja ja sinun täytyy vain yrittää kukin 1 näistä kunnes saat sen. 94 00:07:42,260 --> 00:07:45,470 Oh. Joten minun pitäisi toistaa? 95 00:07:45,470 --> 00:07:51,600 Caesar Cipher, Se on - tarkoitan, sinun on tekemisissä sen kanssa ongelmia, että te - 96 00:07:51,600 --> 00:07:56,110 tai kai Standard Edition ongelman joukko, joka ei päällä hakkeri painos. 97 00:07:56,110 --> 00:08:01,550 Joten Standard Edition ongelmaan asetettu, saat viestin, kuten "Hei, maailma" 98 00:08:01,550 --> 00:08:08,410 ja sinulla on myös useita, kuten 6, ja otat tämän viestin, ja kunkin merkin 99 00:08:08,410 --> 00:08:11,310 käännät sen 6 kantoja aakkoset. 100 00:08:11,310 --> 00:08:16,560 Joten 'h' hei tulisi h-i-j-k-l-m-n. 101 00:08:16,560 --> 00:08:19,600 Joten ensimmäinen kirjain olisi n.. Teemme sama juttu e.. 102 00:08:19,600 --> 00:08:23,530 Jos meillä on, kuten, z tai jotain, sitten kääri takaisin ympäri "." 103 00:08:23,530 --> 00:08:29,280 Mutta kukin merkki saa kierrättää 6 merkkiä myöhemmin aakkoset, ja se ei ole kovin turvallinen 104 00:08:29,280 --> 00:08:35,440 sillä on ainoastaan ​​26 mahdollisuuksia kuinka monella tavalla voit kääriä yhden kirjaimen. 105 00:08:35,440 --> 00:08:42,919 Joten voit vain kokeilla kaikki 26 niistä, ja oletettavasti pitkään riittävän viesti 106 00:08:42,919 --> 00:08:46,860 vain 1 niistä mahdollisesti 26 asioita tulee olemaan luettavissa, 107 00:08:46,860 --> 00:08:50,300 ja luettavissa kukaan tule olemaan alkuperäisen viestin. 108 00:08:50,300 --> 00:08:56,240 Joten se ei ole kovin hyvä tapa salaamalla yhtään mitään. 109 00:08:56,240 --> 00:08:59,070 Liity nuo shortsit, "Mikä on funktio?" 110 00:08:59,070 --> 00:09:03,370 Joten mikä on funktio? Kyllä. 111 00:09:03,370 --> 00:09:11,640 [Student] Se on kuin erillinen koodinpätkä, että voit soittaa läpi ja sitten saada palauttaa arvon riippumatta. 112 00:09:11,640 --> 00:09:18,160 Joo. Joten minä vastaamme siihen myös vastaamalla seuraavaan - tai toista mukaan myös vain vastaamalla seuraavaan. 113 00:09:18,160 --> 00:09:22,410 Voit käyttää toimintoja eikä vain kopioimalla koodi uudestaan ​​ja uudestaan. 114 00:09:22,410 --> 00:09:27,200 Ota vain se koodi, laita se fuction, ja sitten voisi vain soittaa toiminto 115 00:09:27,200 --> 00:09:29,870 missä olet ollut kopioimalla. 116 00:09:29,870 --> 00:09:33,350 Joten toiminnot ovat käyttökelpoisia. 117 00:09:33,350 --> 00:09:35,860 Joten nyt teemme todellisia ongelmia. 118 00:09:35,860 --> 00:09:46,490 Ensimmäinen. Joten ajatus ensimmäinen on, ohitat sen merkkijono, ja riippumatta - 119 00:09:46,490 --> 00:09:52,060 tai se sano pieniksi? Siinä ei sanota pieniksi. 120 00:09:52,060 --> 00:09:57,730 Joten viesti voi olla mitä tahansa, ja - oh no. Se. 121 00:09:57,730 --> 00:10:01,610 "Yksinkertaisuuden voit olettaa, että käyttäjä vain syöttää pieniä kirjaimia ja välilyöntejä." 122 00:10:01,610 --> 00:10:08,180 Joten ohitamme sen sanoman vain pieniä kirjaimia ja sitten vuorotella 123 00:10:08,180 --> 00:10:15,450 isojen ja pienten - muutamme merkkijono oltava isoja ja pieniä, vuorotellen. 124 00:10:15,450 --> 00:10:22,920 Joten ennen kuin voimme antaa teille toisen jopa sukeltaa ongelma, 125 00:10:22,920 --> 00:10:32,420 Mikä on ensimmäinen asia, että meidän täytyy tehdä? 126 00:10:32,420 --> 00:10:36,900 Voi, mitä minä klikkaa? Minä vain napsautti sähköpostin täällä. 127 00:10:36,900 --> 00:10:42,870 Joten ensimmäinen asia, joka meidän täytyy tehdä - olen katsot väärä? 128 00:10:42,870 --> 00:10:49,320 Onko tämä osa tätä? 129 00:10:49,320 --> 00:10:51,320 Ei, ne ovat edelleen olemassa, vaikka. 130 00:10:51,320 --> 00:10:55,160 Okei, vielä täällä. 131 00:10:55,160 --> 00:11:03,160 Nyt emme voi olettaa -? Kyllä. Täällä emme voi olettaa, että se on vain pieniä ja tilat. 132 00:11:03,160 --> 00:11:07,770 Joten nyt meidän on käsiteltävä sitä, että kirjaimet voivat olla mitä haluamme niiden olevan. 133 00:11:07,770 --> 00:11:11,910 Ja niin ensimmäinen asia haluamme tehdä, on vain saada viestin. 134 00:11:11,910 --> 00:11:19,790 Meidän täytyy vain saada merkkijono, merkkijono s = GetString, okei. 135 00:11:19,790 --> 00:11:24,890 Nyt tähän ongelmaan on olemassa pari tapaa tehdä se. 136 00:11:24,890 --> 00:11:29,840 Mutta olemme menossa halua käyttää bittioperaatioiden täällä. 137 00:11:29,840 --> 00:11:35,280 Onko ihmisiä, jotka joko eivät olleet supersection, 138 00:11:35,280 --> 00:11:37,480 tai jotain, ja en tiedä mitä bittioperaatioiden ovat? 139 00:11:37,480 --> 00:11:41,710 Tai miten ne liittyvät ASCII millään tavalla? 140 00:11:41,710 --> 00:11:45,650 [Opiskelija] en ollut supersection, mutta tiedän mitä bittioperaatioiden ovat. 141 00:11:45,650 --> 00:11:49,560 Okei. Joten en tarvitse mennä yli perusasiat niitä, mutta selitän 142 00:11:49,560 --> 00:11:51,830 mitä aiomme haluavat käyttää täällä. 143 00:11:51,830 --> 00:11:59,680 Joten '': binääriesityksen pääoman, numero on 65. 144 00:11:59,680 --> 00:12:07,560 Olen juuri menossa katsomaan - 41 tulee olemaan 01.000.001. 145 00:12:07,560 --> 00:12:14,170 Niin että olisi 65 desimaalin, joten tämä on binääriesitys merkin pääoman A. 146 00:12:14,170 --> 00:12:19,440 Nyt, binääriesityksen merkin pieniksi "a" 147 00:12:19,440 --> 00:12:33,350 tulee olemaan sama juttu, melkein. Onko tuo - 6, joo. Tämä on oikea. 148 00:12:33,350 --> 00:12:37,670 Joten binary pääoma, binary pieniä "." 149 00:12:37,670 --> 00:12:43,940 Niin huomaa että ero ja "" on tämä yksi bitti. 150 00:12:43,940 --> 00:12:49,440 Ja tämä sattuu olemaan 32 bittiä, bitti edustaa numero 32. 151 00:12:49,440 --> 00:12:53,910 Ja se on järkevää, koska on 65, "" on 97. 152 00:12:53,910 --> 00:12:56,610 Ero niiden välillä on 32. 153 00:12:56,610 --> 00:13:03,770 Joten nyt me tiedämme, että voimme muuntaa ja "" ottamalla 154 00:13:03,770 --> 00:13:09,710 ja bittikohtainen oring sen kanssa - joka näyttää 1. 155 00:13:09,710 --> 00:13:20,900 Tämä on bittikohtainen tai, 00100000, ja että annan meille "." 156 00:13:20,900 --> 00:13:26,850 Ja voimme saada '' to by peiton ANDing 157 00:13:26,850 --> 00:13:33,700 on 11, 0 tässä paikassa, 11111. 158 00:13:33,700 --> 00:13:43,840 Joten tämä antaa sitten meille, mitä "" oli, mutta kumoavat tämän yksittäisen bitin, 159 00:13:43,840 --> 00:13:50,070 joten saamme 01000001, en tiedä, jos laskin oikein. 160 00:13:50,070 --> 00:13:56,750 Mutta tämä tekniikka peiton oring päästä pääoman pieniksi, 161 00:13:56,750 --> 00:14:02,080 ja peiton ANDing päästä siitä pieniä pääoman ei ole yksinomaan A. 162 00:14:02,080 --> 00:14:06,510 Kaikki kirjaimet, K vs k, Z vs z, 163 00:14:06,510 --> 00:14:10,080 ne kaikki ovat juuri menossa eroavat tämän yhden bitin. 164 00:14:10,080 --> 00:14:16,290 Ja jotta voit käyttää tätä muuttaa mistä tahansa kirjain tahansa kirjain ja päinvastoin. 165 00:14:16,290 --> 00:14:26,670 Okei. Niin helppo tapa saada tästä - niin sen sijaan, 166 00:14:26,670 --> 00:14:32,170 kirjoittaa mitä 1011111 on - helppo tapa edustaa tämän numero, ja tämä ei ole yksi 167 00:14:32,170 --> 00:14:39,710 että menin ohi supersection, mutta tilde (~) on toinen bittioperaattori. 168 00:14:39,710 --> 00:14:42,520 Mikä ~ ei se tarkastelee hieman edustusta. 169 00:14:42,520 --> 00:14:45,630 Otetaan mikä tahansa numero. 170 00:14:45,630 --> 00:14:53,130 Tämä on vain joitakin binaariluku, ja mitä ~ se on se vain kääntää kaikki bitit. 171 00:14:53,130 --> 00:15:00,630 Joten tämä oli 1, nyt 0, tämä on 0, nyt 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Niin, että kaikki ~ tekee. Joten 32 tulee olemaan numero - päästä eroon - 173 00:15:08,320 --> 00:15:23,320 joten 32 tulee olemaan numero 00100000, ja niin ~ tämän tulee olemaan 174 00:15:23,320 --> 00:15:29,980 Tämä numero täällä että minä anded "" kanssa. 175 00:15:29,980 --> 00:15:35,600 Onko kaikki nähdä, että? Tämä on melko yleinen, kuten silloin, kun haluat selvittää 176 00:15:35,600 --> 00:15:40,740 myöhemmin asioita, joita emme ehkä nähdä, kun haluamme nähdä, jos - 177 00:15:40,740 --> 00:15:44,710 tai haluamme kaiken, jokainen bitti paitsi 1 178 00:15:44,710 --> 00:15:47,910 sinulla on taipumus tehdä ~ bittien että emme halua asettaa. 179 00:15:47,910 --> 00:15:53,090 Joten emme halua 32 bitti, joten emme ~ 32. 180 00:15:53,090 --> 00:15:57,790 Okei. Joten voimme käyttää kaikkia näitä täällä. 181 00:15:57,790 --> 00:16:03,000 Selvä, joten on hienoa, jos et ole tehnyt, meillä on hitaasti kävelevät yhdessä, 182 00:16:03,000 --> 00:16:11,870 tai kävellä yli tämän, joten - tätä kautta. Kävele tätä. 183 00:16:11,870 --> 00:16:20,790 Joten meillä on merkkijono, ja haluamme silmukan yli jokaisen merkin merkkijonon ja tehdä jotain sille. 184 00:16:20,790 --> 00:16:26,710 Miten siis silmukan yli merkkijono? Mitä meidän pitäisi käyttää? 185 00:16:26,710 --> 00:16:30,980 En aio tehdä sitä täällä. Joo. 186 00:16:30,980 --> 00:16:42,940 Joten minulla on iteraattori, ja hän sanoi sen, mutta mistä tiedän kuinka monta merkkiä on merkkijono? 187 00:16:42,940 --> 00:16:47,030 Strlen (s), i + +. 188 00:16:47,030 --> 00:16:49,860 Joten mitä olen tehnyt täällä ei ole paras tapa hoitaa asioita. 189 00:16:49,860 --> 00:16:51,860 Tietääkö kukaan miksi? 190 00:16:51,860 --> 00:16:55,290 Koska olet tarkkailun kielen merkkijono joka ikinen kerta. 191 00:16:55,290 --> 00:17:06,859 Joten aiomme haluat siirtää strlen, voisin sanoa täällä, int pituus = strlen (s), 192 00:17:06,859 --> 00:17:11,900 ja sitten voin 00:17:20,410 Voisin myös tehdä int i = 0, pituus = strlen (s). 194 00:17:20,410 --> 00:17:25,010 Ja niin tämä on hieman parempi, koska nyt olen rajoittanut 195 00:17:25,010 --> 00:17:29,150 muuttuvan pituuden vain tätä ", niin" silmukan, sen sijaan todetaan ennen 196 00:17:29,150 --> 00:17:34,990 ja että se on aina olemassa, ja jos et ole kiinni, miksi se on huono, 197 00:17:34,990 --> 00:17:39,410 tai miksi alkuperäinen oli huono, Se on - aloita varten silmukka. 198 00:17:39,410 --> 00:17:43,380 Tarkistin kunnossa. On i 00:17:46,790 Joten pituus s, nyt työskennellä "hei" koko ajan. 200 00:17:46,790 --> 00:17:49,670 Joten pituus s, H-e-l-l-o. Pituus on 5. 201 00:17:49,670 --> 00:17:57,580 Joten i = 0, pituus on 5, joten i ei ole <5, joten silmukka jatkuu. 202 00:17:57,580 --> 00:18:02,750 Sitten mennään taas. Tarkistamme kunnossa. On i 00:18:08,390 Joten tarkista pituus hei. H-e-l-l-o. Tuo 5; i ei ole <5, niin jatkamme taas. 204 00:18:08,390 --> 00:18:13,330 Joten olemme laskettaessa, luotamme hei, kunkin iterointia silmukan, 205 00:18:13,330 --> 00:18:17,380 edes ajatellut sitä koskaan muuttaa, se on aina olemaan 5. 206 00:18:17,380 --> 00:18:22,530 Joten me vain muistaa 5 edessä, ja nyt kaikki on paremmin. 207 00:18:22,530 --> 00:18:24,990 Joten iteroimalla koko merkkijono. 208 00:18:24,990 --> 00:18:31,470 Mitä haluamme tehdä jokaisen merkin merkkijonon? 209 00:18:31,470 --> 00:18:38,510 [Student ottaen käsittämätön] 210 00:18:38,510 --> 00:18:47,000 Joo. Joten, jos merkki on ei-aakkosellinen, niin haluamme vain ohittaa sen. 211 00:18:47,000 --> 00:18:52,300 Koska me vain välitä aakkosjärjestyksessä, emme voi hyödyntää numero. 212 00:18:52,300 --> 00:19:10,850 Joten kuinka voimme tehdä tämän? Joten meidän ehto, joten jos haluamme jotain - tarkista jos se on aakkosellinen. 213 00:19:10,850 --> 00:19:14,060 Miten siis tarkistaa tämän? 214 00:19:14,060 --> 00:19:18,720 [Opiskelija] Voit vain käyttää toimintoa on alfa. 215 00:19:18,720 --> 00:19:23,160 Onko se mukana kummassakin näistä, tai ovat vastaavia, char.h tai jotain? 216 00:19:23,160 --> 00:19:32,710 Älkäämme käytä on alfa-toiminto ja käytä nimenomainen - joten meillä on s [i] 217 00:19:32,710 --> 00:19:40,460 että on kahdeksas luonne s, muistaa, että merkkijono on joukko merkkejä, 218 00:19:40,460 --> 00:19:43,180 joten kahdeksas luonnetta s. 219 00:19:43,180 --> 00:19:49,280 Nyt, jos se on kirjain, tiedämme sen on oltava tietyllä taajuusalueella. 220 00:19:49,280 --> 00:19:54,370 Ja mikä on se alue? 221 00:19:54,370 --> 00:20:07,860 Joo. Joten jos s [i] on ≥ 65 ja s [i] on ≤ 90, mitä minun pitäisi tehdä sen sijaan? 222 00:20:07,860 --> 00:20:18,470 Joo. Joten sinun pitäisi ehdottomasti ei edes tarvitse tietää ASCII arvoja mitään koskaan. 223 00:20:18,470 --> 00:20:25,640 Älä koskaan ajattele numerot 65, 90, 97 ja 102, tai mikä se on. 224 00:20:25,640 --> 00:20:32,470 Sinun ei tarvitse - 112? - Sinun ei tarvitse tietää niitä lainkaan. Se on väärin myös. 225 00:20:32,470 --> 00:20:41,940 Käytä vain yhden tarjouksen merkkejä, heittomerkki vakioita. Joten "ja alle 90 on" Z. " 226 00:20:41,940 --> 00:20:47,930 Ja tämä on huomattavasti parempi - en tiedä päältä pääni, että Z on 90. 227 00:20:47,930 --> 00:20:52,690 Tiedän päältä pääni, että "Z" on pääoman Z. 228 00:20:52,690 --> 00:21:02,100 Niin kauan kuin tämä on välillä pääoman pääoman Z, tai voimme tarkistaa pieniä, 229 00:21:02,100 --> 00:21:17,010 Tai jos se on välillä ≥ "ja ≤ z. 230 00:21:17,010 --> 00:21:19,010 Joten se tilaamme. 231 00:21:19,010 --> 00:21:22,520 Tyyliä mihin nämä asiat vaihtelee. 232 00:21:22,520 --> 00:21:29,520 Teen sen näin. 233 00:21:29,520 --> 00:21:31,520 Nyt, mitä me haluamme tehdä? 234 00:21:31,520 --> 00:21:39,530 Tiedämme, että tämä kirje on luonteeltaan, kirjainmerkki. 235 00:21:39,530 --> 00:21:46,270 Joten meidän täytyy vuorotella onko tämä olisi nyt iso kirjain tai pieni kirjain. 236 00:21:46,270 --> 00:21:48,820 Miten seurata joista yksi haluamme sen olevan? 237 00:21:48,820 --> 00:21:55,520 [Student ääniä, käsittämättömällä] 238 00:21:55,520 --> 00:21:59,150 Joten kyllä, mutta haluan tarkistaa. 239 00:21:59,150 --> 00:22:04,910 Moduuli 0-2 sanottiin, oli ehdotus heitetty ulos, ja olen samaa mieltä. 240 00:22:04,910 --> 00:22:11,780 Paitsi ilmoitus, että kuten - on tässä tapauksessa? Joo. 241 00:22:11,780 --> 00:22:18,270 Se on joka toinen, mutta emme voi moduuli 2 i tai i mod 2, koska 242 00:22:18,270 --> 00:22:22,950 huomata, että E on pääkaupunki ja "" on pieni? Mutta on tilaa erottamalla heidät? 243 00:22:22,950 --> 00:22:27,150 Joten he tulevat olemaan samat mod 2, mutta he ovat erilaisia ​​tapauksia. 244 00:22:27,150 --> 00:22:29,150 [Student kysymys, käsittämättömällä] 245 00:22:29,150 --> 00:22:34,690 Joo. Eli olemme juuri menossa pitämään laskea. 246 00:22:34,690 --> 00:22:38,730 Voisimme myös tehdä sen, jos haluamme, että saattaa saada hieman kankea 247 00:22:38,730 --> 00:22:41,300 in for loop ilmoituksista, laitan sen tänne. 248 00:22:41,300 --> 00:22:48,840 Joten int count = alkaa 0. 249 00:22:48,840 --> 00:22:54,070 Ja nyt, aion laskea kuinka monta kirjaimia meillä on ollut. 250 00:22:54,070 --> 00:22:59,550 Joten olemme väistämättä menossa laskemaan + + jälkeen löysimme toisen kirjainmerkki. 251 00:22:59,550 --> 00:23:09,130 Mutta, joten nyt sanot jos count mod 2. 252 00:23:09,130 --> 00:23:12,590 Joten mitä jos count mod 2? Oh. Teen == 0 nyt. 253 00:23:12,590 --> 00:23:21,740 Otamme myös mennä yli siitä. Joten jos count mod 2 == 0, niin mitä? 254 00:23:21,740 --> 00:23:27,830 [Opiskelijat vastaus, käsittämättömällä] 255 00:23:27,830 --> 00:23:32,750 Niinpä haluamme päätyä isoja. 256 00:23:32,750 --> 00:23:37,520 On 2 tapausta, isoja ja pieniä ovat 2 tapausta. 257 00:23:37,520 --> 00:23:40,990 Joten jos olemme pieniä meidän tehdä se isoiksi. 258 00:23:40,990 --> 00:23:43,710 Jos se on iso meidän ei tarvitse tehdä mitään. 259 00:23:43,710 --> 00:23:50,760 Mutta on olemassa tapa - shouldn't ovat selattava - 260 00:23:50,760 --> 00:23:54,800 että emme edes tarvitse tarkistaa, onko se isoja vai pieniä? 261 00:23:54,800 --> 00:24:02,240 Mitä voimme tehdä aina varmistaa, että olemme aina päätyvät isoja? 262 00:24:02,240 --> 00:24:07,830 Joten huomaa mitä teimme pieniä "" mitä jos tekisimme tätä täsmälleen sama asia isoiksi? 263 00:24:07,830 --> 00:24:11,900 Onko isoiksi muutos, vai arvon muutos? 264 00:24:11,900 --> 00:24:23,100 Joo. Joten kaikki kirjain peiton anded kanssa ~ 32 tulee olemaan saman ison kirjaimen 265 00:24:23,100 --> 00:24:29,220 koska jostain ison kirjaimen 32. bitti ei ole asetettu. 266 00:24:29,220 --> 00:24:40,920 Joten jos haluamme tuoda merkki s [i], haluamme tulla pieniä tai isoja. 267 00:24:40,920 --> 00:24:46,890 Joten jos se oli pieni, se on nyt iso, jos se oli iso, se on edelleen isoja, ja se on siinä. 268 00:24:46,890 --> 00:24:54,290 Sanoin tämän supersection: Voit käyttää 32, jos haluat, mutta minulla on tapana mieluummin tehdä '"-, 269 00:24:54,290 --> 00:25:01,150 sen sijaan, että vain tavallinen 32, koska se voi olla mikä tahansa muu vähän. 270 00:25:01,150 --> 00:25:03,610 Sen jälkeen, kun 32-bittinen, se voi olla mitä tahansa näistä, tai meillä ei olisi tarpeeksi 271 00:25:03,610 --> 00:25:05,840 numeroita edustaa kaikkia merkkejä. 272 00:25:05,840 --> 00:25:09,110 Joten jos saat 32 bittinen, se voisi olla 64 bittinen, se voisi olla 128 bit. 273 00:25:09,110 --> 00:25:13,990 Jokainen näistä bittien voisi olla hieman joka erottaa pieniä ja isoja. 274 00:25:13,990 --> 00:25:18,350 Minun ei tarvitse tietää, että se on 32-bittinen. 275 00:25:18,350 --> 00:25:27,130 Voin käyttää tätä "" - saada hieman poikkeavan kahden 276 00:25:27,130 --> 00:25:33,000 tarvitsematta turvautua maaginen numero on 32. 277 00:25:33,000 --> 00:25:38,770 Ja nyt, muuten laskea oli outoa, joten mitä haluan tehdä? 278 00:25:38,770 --> 00:25:43,920 [Student vastauksia, käsittämättömällä] 279 00:25:43,920 --> 00:25:45,920 [Opiskelija] Mikä tuo on? 280 00:25:45,920 --> 00:25:49,850 Teen sen 1 sekunnin. 281 00:25:49,850 --> 00:25:55,690 Joten nyt jos haluan - Haluan varmistaa hahmo on nyt pieni, 282 00:25:55,690 --> 00:26:04,140 joten voin tai 32, ja 32 tarkoittaa "" - A. 283 00:26:04,140 --> 00:26:06,510 Mutta ilmoitus, jonka samoja perusteluja kuin edellinen, että jos 284 00:26:06,510 --> 00:26:11,670 kirje oli jo pieniä, sitten oring 32 vain pitää se pieniksi. 285 00:26:11,670 --> 00:26:16,220 Se ei ole muuttunut alkuperäisen luonteen. 286 00:26:16,220 --> 00:26:19,910 Mutta nyt minulla ei ole välttää sanomalla: "Jos se on pieni, unohda se, 287 00:26:19,910 --> 00:26:23,650 jos se on iso, niin vaihda se. " 288 00:26:23,650 --> 00:26:26,900 Se on paljon helpompaa tehdä tätä. 289 00:26:26,900 --> 00:26:33,190 [Opiskelija] Jospa strategia vähentämällä isojen alkaen pieniä työstä jos se ei 32? 290 00:26:33,190 --> 00:26:35,330 Jos se oli, niinku, 34 tai jotain? 291 00:26:35,330 --> 00:26:41,840 Joten, sinun täytyy tietää, että ero 2 on -? >> 1 bitti. 292 00:26:41,840 --> 00:26:49,840 Se voisi olla enemmän kuin 1 bitti, niin kauan kuin kaikki bitit alle tämän kannan ovat samat. 293 00:26:49,840 --> 00:26:58,500 Tarvitsemme siis vähintään 26 merkkiä - tai on 26 merkkiä. 294 00:26:58,500 --> 00:27:04,590 Tarvitsemme siis ainakin 26 numeroa edustamaan eroa - 295 00:27:04,590 --> 00:27:07,650 Ero ja 'a' on oltava vähintään 26, 296 00:27:07,650 --> 00:27:10,760 tai muuten emme olisi edustettuna kaikki pääoman numerot. 297 00:27:10,760 --> 00:27:18,630 Tämä tarkoittaa, että jos aloitamme klo 1, se tulee käyttää kaikkia näitä bittiä, 298 00:27:18,630 --> 00:27:23,900 kaikki nämä ensimmäiset 5 bittiä, joka edustaa kaikkea Z. 299 00:27:23,900 --> 00:27:32,170 Siksi seuraava bitti, tai tämän bitin, seuraava bitti on yksi, joka on valittu erottamaan ja "." 300 00:27:32,170 --> 00:27:40,930 Juuri siksi, ASCII taulukossa on 5 symboleja erottaa isot kirjaimet alkaen pieniä kirjaimia. 301 00:27:40,930 --> 00:27:49,050 Koska ne ovat symboleja, ylimääräiset 5, joka tuo esiin 32 on ero niiden välillä. 302 00:27:49,050 --> 00:27:51,840 [Student] Jotta voisimme tehdä sen, koska ASCII on suunniteltu sillä tavalla. 303 00:27:51,840 --> 00:27:57,280 Kyllä. Mutta ASCII - erotus voi olla myös molemmat näistä bittiä. 304 00:27:57,280 --> 00:28:12,040 Kuten, jos oli 10000001, ja "" oli 11100001 - unohdan, mitä. 305 00:28:12,040 --> 00:28:18,100 Mutta jos se olisi tämä, niin voisimme silti käyttää "" - A. 306 00:28:18,100 --> 00:28:22,650 Se on juuri nyt ero ja 'a' on edelleen näiden 2 bittiä. 307 00:28:22,650 --> 00:28:32,240 Minusta se on kirjoitettu 48. Onko 32 + 64? Mielestäni on? 308 00:28:32,240 --> 00:28:40,160 Se olisi silti 2 bittiä, jokainen merkki, kuten, Z ja Z, K ja K 309 00:28:40,160 --> 00:28:45,160 ne olisivat edelleen on täsmälleen sama bittien arvoksi on asetettu lukuun ottamatta 2 bittiä. 310 00:28:45,160 --> 00:28:48,870 Niin kauan kuin se on aina totta, riippumatta siitä, jos käytämme ASCII tai jokin muu järjestelmä, 311 00:28:48,870 --> 00:28:53,050 niin kauan kuin on olemassa vain tietty määrä bittejä, jotka ovat erilaisia ​​kunkin merkin, 312 00:28:53,050 --> 00:28:55,050 Sitten se toimii hyvin. 313 00:28:55,050 --> 00:29:06,110 Se on vain 32 perustettiin, koska se on ensimmäinen voisimme mahdollisesti käyttää. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Minulla on tapana mieluummin, jos et ole nähnyt, jos lohko on vain yksi linja, 315 00:29:14,520 --> 00:29:24,280 voit päästä eroon aaltosulkeita, joten olen yleensä mieluummin näin. 316 00:29:24,280 --> 00:29:34,010 Myös, tiedät kuinka voimme tehdä asioita, kuten s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Voit myös tehdä s [i] peiton ja = 32. 318 00:29:41,090 --> 00:29:46,400 Ja peiton OR = 32. 319 00:29:46,400 --> 00:29:51,490 Myös lasketa mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Muista siis, että - en kirjoita sitä - ei-nolla on tosi, ja 0 on epätosi. 321 00:30:00,900 --> 00:30:07,880 Eli "jos count mod 2 == 0" on sama kuin sanonta "jos ei lasketa mod 2". 322 00:30:07,880 --> 00:30:11,580 Olisin ehkä juuri päinvastaiseksi linjat ja sanoi, "jos count mod 2, 323 00:30:11,580 --> 00:30:15,350 älä TAI 1, muuten älä JA 1, "joten en tarvitse" ei. " 324 00:30:15,350 --> 00:30:18,650 Mutta tämä toimii yhtä hyvin. 325 00:30:18,650 --> 00:30:25,660 Ja mitä muuta voin tehdä täällä? 326 00:30:25,660 --> 00:30:29,060 Voisit yhdistää ne ternäärinen jos halusi, mutta sitten se olisi vain tehdä asiat Messier 327 00:30:29,060 --> 00:30:33,770 ja luultavasti vaikeampi lukea, joten emme tee sitä. 328 00:30:33,770 --> 00:30:37,330 Kellään mitään muita ehdotuksia? 329 00:30:37,330 --> 00:30:41,580 Onko kaikki ongelma pyysi? Ai niin. 330 00:30:41,580 --> 00:30:51,070 Joten päästä eroon näistä tyhjiä rivejä, nyt me tulostaa f,% s on yksi jouset, 331 00:30:51,070 --> 00:30:56,620 Me tulostaa f, s. 332 00:30:56,620 --> 00:30:59,330 Nyt ajaa sitä. Teinkö jotain väärin? 333 00:30:59,330 --> 00:31:03,200 Se \ ", haluan n. 334 00:31:03,200 --> 00:31:07,840 Okei. Nyt me ajaa sitä. Se luultavasti huutaa minulle. 335 00:31:07,840 --> 00:31:11,250 Strlen on string.h. 336 00:31:11,250 --> 00:31:14,290 Joten tämä on mukava asia clang se kertoo mitä se on, 337 00:31:14,290 --> 00:31:19,140 sijaan GCC joka vain sanoo, "Hei, unohdit jotain, en tiedä mitä se oli." 338 00:31:19,140 --> 00:31:29,220 Mutta tämä kertoo minulle, "Sinä tarkoitus sisällyttää string.h." 339 00:31:29,220 --> 00:31:32,130 Joten en ole saanut mitään, joten se ei sano mitään. 340 00:31:32,130 --> 00:31:42,540 Mutta me teemme heidän Esimerkiksi "thanks 4 the add". 341 00:31:42,540 --> 00:31:47,880 Se näyttää oikealta. Hurraa. 342 00:31:47,880 --> 00:31:52,370 Joten palata tärkein, en juuri koskaan tee sitä. 343 00:31:52,370 --> 00:31:57,110 Se on vapaaehtoinen. Ja tärkein on ainoa toiminto, jota varten se on vapaaehtoista. 344 00:31:57,110 --> 00:32:07,140 Jos et palauta mitään tärkein, se olettaa, että olet tarkoitus palauttaa 0. 345 00:32:07,140 --> 00:32:13,070 Kysymyksiä? 346 00:32:13,070 --> 00:32:20,980 Okei. Joten nyt toinen ongelma. 347 00:32:20,980 --> 00:32:24,810 "Recall viikolla 2 toiseksi luento että vaihtokauppa 2 muuttujien arvot ajamalla 348 00:32:24,810 --> 00:32:30,780 nuo 2 muuttujien funktio (vaikka nimeltään swap) ei juuri toimi, ainakaan ilman "osoittimia. '" 349 00:32:30,780 --> 00:32:37,020 Ja sivuuttaa osoittimet kunnes saamme heidät. 350 00:32:37,020 --> 00:32:40,070 Haluamme vaihtaa 2 muuttujia, emme käytä toimintoa tehdä se. 351 00:32:40,070 --> 00:32:43,410 Olemme edelleen aiomme tehdä sen tärkeimpien kuin se sanoo. 352 00:32:43,410 --> 00:32:48,360 Mutta käyttää näitä 2 muuttujia, emme halua käyttää tilapäistä muuttujaa. 353 00:32:48,360 --> 00:32:50,770 On 2 tapaa tehdä tätä. 354 00:32:50,770 --> 00:32:56,310 Voit tehdä sen käyttämällä perinteistä binääri toimijoille. 355 00:32:56,310 --> 00:33:00,180 Joten ei kukaan tiedä nopea ja likainen tapa tehdä se? 356 00:33:00,180 --> 00:33:07,650 Se saattaisi kestää minuutin ajattelua. Jos minulla on - 357 00:33:07,650 --> 00:33:12,130 Näytän ongelma niin kuin he pyytävät. Joten jos minulla on 2 muuttujia,, joka on vain kokonaisluku 358 00:33:12,130 --> 00:33:17,800 että he antavat minulle, ja summamuuttuja B, joka on toinen kokonaisluku, että olen antanut. 359 00:33:17,800 --> 00:33:22,700 Joten jos minulla on nämä 2 muuttujia, nyt haluan vaihtaa niitä. 360 00:33:22,700 --> 00:33:31,550 Perinteinen, käyttäen säännöllisiä binääri toimijat, tarkoitan, kuten +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ei bittioperaatioiden jotka vaikuttavat binary. 362 00:33:36,630 --> 00:33:39,600 Joten käyttäen -, +, ÷, ja kaikki nuo. 363 00:33:39,600 --> 00:33:52,980 Voisimme vaihtaa tekemällä jotain = a + b, ja b = - b, = - b. 364 00:33:52,980 --> 00:34:04,260 Joten järki tarkistaa, ja sitten näemme, miksi se toimii. 365 00:34:04,260 --> 00:34:13,320 Sanotaan = 7, b = 3, niin a + b tulee olemaan 10. 366 00:34:13,320 --> 00:34:18,820 Joten olemme nyt asetetaan = 10, ja sitten teemme b = - b. 367 00:34:18,820 --> 00:34:30,250 Joten teemme b = - b, joka tulee olemaan 7 ja b = - b jälleen 368 00:34:30,250 --> 00:34:38,650 tai = a - b. Joka tulee olemaan 10-7, joka on 3. 369 00:34:38,650 --> 00:34:44,850 Joten nyt oikein, "" oli 7, b oli 3, ja nyt b on 7 ja "" on 3. 370 00:34:44,850 --> 00:34:48,679 Niin, että tällainen on järkevää, "a" on yhdistelmä 2 numerot. 371 00:34:48,679 --> 00:34:53,000 Tässä vaiheessa, "a" on yhdistelmä, ja sitten me vähentämällä pois alkuperäisen b, 372 00:34:53,000 --> 00:34:56,860 ja sitten me vähentämällä, mikä oli alkuperäinen "." 373 00:34:56,860 --> 00:35:01,150 Mutta tämä ei toimi kaikki numerot. 374 00:35:01,150 --> 00:35:08,880 Voit nähdä tämän, Tarkastellaan järjestelmää, joten meillä yleensä ajatella kokonaislukuja 32 bittiä. 375 00:35:08,880 --> 00:35:13,050 Tehdään jotain, joka on vain kuin 4 bittiä. 376 00:35:13,050 --> 00:35:15,450 Toivottavasti keksiä hyvä esimerkki juuri nyt. 377 00:35:15,450 --> 00:35:18,680 Joten tiedän, tämä on helppo. 378 00:35:18,680 --> 00:35:26,720 Sanotaan meidän 2 numeroa ovat 1111, ja 1111, joten olemme binary juuri nyt. 379 00:35:26,720 --> 00:35:34,630 Itse desimaaleja, jos haluat ajatella sitä niin, = 15 ja b = 15. 380 00:35:34,630 --> 00:35:37,630 Ja niin me odotamme, kun olemme vaihtaa niitä - he eivät edes tarvitse olla samat numerot, 381 00:35:37,630 --> 00:35:41,140 mutta tein sen näin. 382 00:35:41,140 --> 00:35:47,100 Tehdään niistä ei samat numerot. Tehdäänpä 1111 ja 0001. 383 00:35:47,100 --> 00:35:51,860 Joten a = 15 ja b = 1. 384 00:35:51,860 --> 00:35:57,670 Kun me vaihtaa niitä, odotamme "" on 1 ja b olevan 15. 385 00:35:57,670 --> 00:36:01,780 Joten ensimmäinen askel on = a + b. 386 00:36:01,780 --> 00:36:08,770 Meidän numerot ovat ainoastaan ​​4 bittiä leveä, joten ",", joka on 1111, + b, joka on 0001, 387 00:36:08,770 --> 00:36:16,780 tulee päätyä 10000, mutta meillä on vain 4 bittiä. 388 00:36:16,780 --> 00:36:22,540 Joten nyt = 0. 389 00:36:22,540 --> 00:36:34,080 Ja nyt me haluamme asettaa b = - b - Oikeastaan ​​tämä toimii edelleen täydellisesti. 390 00:36:34,080 --> 00:36:39,630 = - b - Katsotaan, jos tämä toimii täydellisesti. 391 00:36:39,630 --> 00:36:53,720 Niin sitten b = 0-1, joka olisi edelleen 15, ja sitten = a - b, joka olisi 1. 392 00:36:53,720 --> 00:36:56,210 Ehkä tämä ei toimi. 393 00:36:56,210 --> 00:36:59,020 Tunnen siellä syystä se ei toimi tavallisella. 394 00:36:59,020 --> 00:37:06,400 Okei, joten siitä oletuksesta, että se ei toimi säännöllisesti binary toiminnan 395 00:37:06,400 --> 00:37:15,040 ja aion etsiä - Aion Google nähdä, jos se on totta. 396 00:37:15,040 --> 00:37:23,490 Joten me haluamme tehdä sen käyttämällä bittioperaatioiden, ja vihje täällä on XOR. 397 00:37:23,490 --> 00:37:28,780 Joten, käyttöön XOR (^) jos et ole nähnyt sitä vielä. 398 00:37:28,780 --> 00:37:34,610 Se on taas bittioperaattori niin se toimii vähän kerrallaan, ja Se on - 399 00:37:34,610 --> 00:37:39,910 Jos on bitit 0 ja 1, niin tämä on 1. 400 00:37:39,910 --> 00:37:45,230 Jos sinulla on bitit 1 ja 0, se tulee olemaan 1, sinulla bitit 0 ja 0 se tulee olla 0, 401 00:37:45,230 --> 00:37:47,640 ja jos sinulla on bitit 1 ja 1 se tulee olemaan 0. 402 00:37:47,640 --> 00:37:56,180 Joten se on kuin OR. Jos jompikumpi bitit ovat totta, se on 1, mutta toisin kuin OR, se ei voi olla molemmat bitit, jotka ovat totta. 403 00:37:56,180 --> 00:37:59,320 TAI olisi tämä olla 1, XOR olisi tämä olla 0. 404 00:37:59,320 --> 00:38:02,250 Joten olemme menossa halua käyttää XOR täällä. 405 00:38:02,250 --> 00:38:09,960 Ajattele sitä hetki, aion Google. 406 00:38:09,960 --> 00:38:16,230 No, et voi lukea, että, olen tällä hetkellä XOR swap algoritmi sivu. 407 00:38:16,230 --> 00:38:21,340 Toivottavasti tämä selittää miksi en voi - 408 00:38:21,340 --> 00:38:34,190 Tämä on juuri algoritmi teimme. 409 00:38:34,190 --> 00:38:37,330 En vieläkään ymmärrä, miksi - Taisin juuri poimittuja huono esimerkki, 410 00:38:37,330 --> 00:38:44,940 mutta tässä tapauksessa, jossa "a" on tapahtunut tulla 0, saatuaan 5 bittiä, joten nyt "a" on 0, 411 00:38:44,940 --> 00:38:48,730 joka on ns "kokonaisluvun ylivuoto." 412 00:38:48,730 --> 00:38:54,370 Mukaan Wikipedia, "Toisin XOR swap, tämä muutos edellyttää, että se käyttää joitakin menetelmiä 413 00:38:54,370 --> 00:38:59,780 takaamaan, että x + y ei aiheuta kokonaisluvun ylivuoto. " 414 00:38:59,780 --> 00:39:08,350 Joten tämä ei ole ongelmia, tämä oli kokonaisluvun ylivuoto, mutta tein jotain väärin. 415 00:39:08,350 --> 00:39:10,520 En ole varma. Yritän keksiä toinen. 416 00:39:10,520 --> 00:39:13,640 [Student] No, ei ole kokonaisluvun ylivuoto kun yrität laittaa numero siellä 417 00:39:13,640 --> 00:39:16,640 suurempi kuin määrä bittejä olet varattu? 418 00:39:16,640 --> 00:39:23,730 Joo. Meillä on 4 bittiä. That's - meillä oli 4 bittiä, me yritä lisätä 1 sitä, joten päädymme 5 bittiä. 419 00:39:23,730 --> 00:39:26,690 Mutta viides bitti aivan katkeaa, joo. 420 00:39:26,690 --> 00:39:28,970 Se saattaisi - 421 00:39:28,970 --> 00:39:33,010 [Opiskelija] Eikö tämä heittää sinut virhe, vai että - se että heittää virhe? 422 00:39:33,010 --> 00:39:40,720 No siis ole mitään virhettä. Kun saat kokoonpano tasolle, erityinen hieman 423 00:39:40,720 --> 00:39:47,020 jossain on asetettu, että mainittu oli ylivuodon, mutta C olet sellainen vain eivät käsitellä asiaa. 424 00:39:47,020 --> 00:39:55,160 Et oikeastaan ​​voi käsitellä sitä ellet käytä erityisiä asennusohjeita C. 425 00:39:55,160 --> 00:39:58,110 Ajatellaanpa XOR swap. 426 00:39:58,110 --> 00:40:02,220 Ja mielestäni Wikipedia ehkä myös sanoa, että - 427 00:40:02,220 --> 00:40:07,310 Joten se myös esille modulaarinen aritmeettinen, joten kai olin teoriassa, tehdä modulaarinen aritmeettinen 428 00:40:07,310 --> 00:40:11,160 kun sanoin, että 0-1 on 15 uudelleen. 429 00:40:11,160 --> 00:40:15,410 Niin että saattaisi - säännöllisesti prosessori, joka tekee 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Koska päädymme 0, vähennämme 1, niin sitten se vain kietoutuu takaisin ympäri 1111. 431 00:40:20,430 --> 00:40:28,930 Joten tämä algoritmi voisi todella työskennellä, a + b, - b, b -, joka voisi olla hieno. 432 00:40:28,930 --> 00:40:34,030 Mutta on joitakin jalostajat, jotka eivät tee sitä, joten se ei olisi hienoa kyseisillä niistä. 433 00:40:34,030 --> 00:40:39,880 XOR swap toimii kaikissa prosessori. Okei. 434 00:40:39,880 --> 00:40:42,280 Ajatuksena on, että sen pitäisi olla sama, vaikka. 435 00:40:42,280 --> 00:40:50,120 Jos käytämme XOR jotenkin saada tietoa sekä jaetaan 1 muuttujien, 436 00:40:50,120 --> 00:40:54,120 ja vedä sitten tietoa yksittäisten muuttujien uudelleen. 437 00:40:54,120 --> 00:41:04,330 Joten ei kellään ideoita / vastaus? 438 00:41:04,330 --> 00:41:14,540 [Student vastaus, käsittämättömällä] 439 00:41:14,540 --> 00:41:22,220 Joten tämä pitäisi toimia, ja myös, XOR on vaihdannainen. 440 00:41:22,220 --> 00:41:27,620 Riippumatta siitä, missä järjestyksessä nämä 2 numeroa sattuvat olemaan täällä, 441 00:41:27,620 --> 00:41:30,100 tämä tulos tulee olemaan sama. 442 00:41:30,100 --> 00:41:35,800 Joten ^ b on b ^. 443 00:41:35,800 --> 00:41:51,860 Saatat myös nähdä tämä kirjoitetaan ^ = b, b ^ =, ^ = b uudelleen. 444 00:41:51,860 --> 00:42:00,200 Joten tämä on oikea, ja miksi tämä toimii, ajattele bittiä. 445 00:42:00,200 --> 00:42:10,400 Käyttämällä pienehkö joukko, sanokaamme 11001, ja 01100. 446 00:42:10,400 --> 00:42:12,790 Joten tämä on "a", ja tämä on b. 447 00:42:12,790 --> 00:42:15,540 Joten ^ = b. 448 00:42:15,540 --> 00:42:22,380 Aiomme olla asettaa '' = on XOR nämä 2 asiaa. 449 00:42:22,380 --> 00:42:32,920 Joten 1 ^ 0 on 1; 1 ^ 1 on 0; 0 ^ 1 on 1, ja 0 ^ 0 on 0; 1 ^ 0 on 1. 450 00:42:32,920 --> 00:42:37,380 Joten "," jos tarkastellaan desimaaliluku, se tulee olemaan - 451 00:42:37,380 --> 00:42:41,160 et aio nähdä paljon suhde alkuperäisen "" ja uusi "," 452 00:42:41,160 --> 00:42:45,600 mutta katsot bittiä, "" on nyt kuin silmäkoko tiedot 453 00:42:45,600 --> 00:42:49,970 Sekä alkuperäinen "a" ja alkuperäinen b. 454 00:42:49,970 --> 00:42:57,930 Joten jos otamme b ^, huomaamme, että me päätyvät alkuperäiseen "." 455 00:42:57,930 --> 00:43:08,910 Ja jos otamme alkuperäisen "" ^ uusi "," näemme me päätyvät alkuperäiseen b. 456 00:43:08,910 --> 00:43:18,380 Joten (^ b) ^ b = alkuperäisen '. " 457 00:43:18,380 --> 00:43:27,910 Ja (^ b) ^ = alkuperäisen b. 458 00:43:27,910 --> 00:43:37,010 On - toinen tapa nähdä tämä on jotain XOR itsessään on aina 0. 459 00:43:37,010 --> 00:43:45,020 Joten 1101 ^ 1101, kaikki bitit tulee olla sama. 460 00:43:45,020 --> 00:43:47,920 Joten ei koskaan tule olemaan silloin 1 on 0 ja toinen on 1. 461 00:43:47,920 --> 00:43:51,080 Joten tämä on 0000. 462 00:43:51,080 --> 00:43:57,240 Sama tämän kanssa. (^ B) ^ b on kuin ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) tulee olla 0, ^ 0 on vain olemaan "," koska kaikki bitit ovat 0. 464 00:44:03,680 --> 00:44:08,050 Joten ainoat jotka tulevat olemaan, jos "" oli alun perin 1 - oli niistä. 465 00:44:08,050 --> 00:44:12,070 Ja sama ajatus täällä, olen melko varma, että se on myös kommutatiivinen. 466 00:44:12,070 --> 00:44:17,590 Joo. En sano sitä ennen se oli kommutatiivinen. 467 00:44:17,590 --> 00:44:24,680 ^ "," Ja se on assosiatiivinen, joten nyt (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 Ja voimme tehdä b ^ (^). 469 00:44:28,970 --> 00:44:31,540 Ja niin taas saamme alkuperäisen b. 470 00:44:31,540 --> 00:44:37,120 Joten "a" on nyt yhdistelmä "a" ja b yhdessä. 471 00:44:37,120 --> 00:44:49,660 Käyttämällä uusi combo "" sanomme b = combo '"^ alkuperäistä b, saamme alkuperäisen". " 472 00:44:49,660 --> 00:45:05,170 Ja nyt = combo '"^ uusi b, mikä oli alkuperäinen - tai mikä on nyt mitä oli" "tai b.. 473 00:45:05,170 --> 00:45:13,620 Että tämä asia täällä. Tämä on = b, vanha b. 474 00:45:13,620 --> 00:45:16,550 Joten nyt kaikki on taas vaihtuneet järjestyksessä. 475 00:45:16,550 --> 00:45:22,960 Jos me todella katseli bittiä, b = ^ b, aikoo XOR nämä 2, 476 00:45:22,960 --> 00:45:33,920 ja vastaus tulee olemaan tämän ja sitten = ^ b on XOR-operaatio näiden 2 ja vastaus on tässä. 477 00:45:33,920 --> 00:45:41,090 Kysymyksiä? Okei. Niin viimeinen on hieman vaikeutuu merkittävästi. 478 00:45:41,090 --> 00:45:43,180 [Opiskelija] Mielestäni hän on kysymys siitä. >> Anteeksi. 479 00:45:43,180 --> 00:45:49,380 [Opiskelija] Mitä oikeastaan ​​nopeammin? Jos käytät tätä XOR, vai onko se jos julistaa uusi muuttuja? 480 00:45:49,380 --> 00:45:55,190 Joten mikä on todella nopeampi, julistaa uusi muuttuja tai käyttämällä XOR vaihtaa? 481 00:45:55,190 --> 00:45:59,600 Vastaus on, kaiken todennäköisyyden mukaan väliaikainen muuttuja. 482 00:45:59,600 --> 00:46:05,780 Ja se johtuu siitä, kun se on käännetty alas - niin on kokoonpano tasolla, 483 00:46:05,780 --> 00:46:12,320 ei ole sellaista asiaa kuin paikallisia muuttujia tai väliaikaisia ​​muuttujia tai tätä kamaa. 484 00:46:12,320 --> 00:46:16,060 He vain haluavat - siellä muistia, ja on olemassa rekistereitä. 485 00:46:16,060 --> 00:46:20,920 Rekisterit ovat missä asioita aktiivisesti tapahtuu. 486 00:46:20,920 --> 00:46:24,750 Et lisätään 2 asioita muistiin, voit lisätä 2 asioita rekistereihin. 487 00:46:24,750 --> 00:46:28,160 Ja voit tuoda asioita muistiin rekisterien sitten lisätä niitä, 488 00:46:28,160 --> 00:46:33,180 ja sitten ehkä laittaa ne takaisin muistiin, mutta kaikki toiminta tapahtuu rekistereihin. 489 00:46:33,180 --> 00:46:38,750 Joten kun käytät tilapäistä muuttujaa lähestymistapaa, yleensä mitä tapahtuu on 490 00:46:38,750 --> 00:46:42,810 nämä 2 luvut ovat jo rekistereihin. 491 00:46:42,810 --> 00:46:46,570 Ja sitten siitä lähtien, kun olet vaihtanut ne, 492 00:46:46,570 --> 00:46:51,540 se vain alkaa käyttää muita rekisteriin. 493 00:46:51,540 --> 00:46:56,510 Anywhere olisit käyttänyt b, se vain käyttää rekisteriä, joka oli jo tallentamiseen "." 494 00:46:56,510 --> 00:47:02,180 Joten se ei tarvitse tehdä mitään itse tehdä swap. Niin? 495 00:47:02,180 --> 00:47:05,690 [Student] Mutta se myös vie enemmän muistia, eikö? 496 00:47:05,690 --> 00:47:10,280 Se vain vie enemmän muistia, jos se tarvitsee tallentaa, että väliaikainen muuttuja. 497 00:47:10,280 --> 00:47:14,830 Kuten jos myöhemmin käyttää tätä tilapäistä muuttujaa taas jonnekin, 498 00:47:14,830 --> 00:47:18,920 sitten - tai voit määrittää jotain, että väliaikainen muuttuja. 499 00:47:18,920 --> 00:47:24,630 Joten jos missään vaiheessa "," b temp on erillisiä arvoja tai jotain, 500 00:47:24,630 --> 00:47:30,680 niin se tulee olla selkeä paikkoihin muistissa, mutta on totta, että 501 00:47:30,680 --> 00:47:34,800 monia paikallisia muuttujia, jotka ovat olemassa vain rekistereihin. 502 00:47:34,800 --> 00:47:44,370 Siinä tapauksessa, se ei ole koskaan laittaa muistiin, joten et koskaan tuhlaa muistia. 503 00:47:44,370 --> 00:47:58,620 Okei. Viimeinen kysymys on vähän enemmän. 504 00:47:58,620 --> 00:48:04,850 Joten tässä, tässä CS50 laitteessa on sanakirja. 505 00:48:04,850 --> 00:48:12,390 Ja syy tähän on, koska [? B66] on oikeinkirjoituksen tarkistus, jossa voit kirjoittaa 506 00:48:12,390 --> 00:48:15,780 käyttäen hash taulukoita tai yrittää tai jotain tietorakennetta. 507 00:48:15,780 --> 00:48:22,660 Olet menossa on kirjallisesti oikeinkirjoituksen tarkistus, ja aiot käyttää tätä sanakirja tehdä niin. 508 00:48:22,660 --> 00:48:28,280 Mutta tämä ongelma, olemme juuri menossa katsomaan jopa nähdä, jos yksittäinen sana löytyy sanakirjasta. 509 00:48:28,280 --> 00:48:31,250 Joten sen sijaan tallennetaan koko sanakirjan joissakin tietorakenteen 510 00:48:31,250 --> 00:48:35,180 ja sitten etsii yli koko asiakirjan onko jotain on kirjoitettu väärin, 511 00:48:35,180 --> 00:48:38,490 haluamme vain löytää 1 sana. Joten voimme vain skannata koko sanakirja 512 00:48:38,490 --> 00:48:44,300 ja jos emme koskaan löydä sanaa koko sanakirjasta, niin se ei ollut siellä. 513 00:48:44,300 --> 00:48:52,150 Jos me skannata koko sanakirjan eivätkä näe sanaa, niin olemme hyviä, löysimme sen. 514 00:48:52,150 --> 00:48:56,580 Tässä sanotaan, että haluamme alkaa tarkastella C: n tiedostojen käsittely toiminto, 515 00:48:56,580 --> 00:48:59,930 koska haluamme lukea sanakirja, 516 00:48:59,930 --> 00:49:07,680 mutta annan vihjeen tästä, mitä toimintoja kannattaa ajatella. 517 00:49:07,680 --> 00:49:11,510 Kirjoitan ne tilat. 518 00:49:11,510 --> 00:49:20,490 Joten tärkeimmät sinun kannattaa katsoa on f auki ja sitten väistämättä, f suljettu, 519 00:49:20,490 --> 00:49:26,540 joka menee lopussa oman ohjelman, ja f skannata f. 520 00:49:26,540 --> 00:49:31,060 Voit myös käyttää f lukea, mutta luultavasti halua 521 00:49:31,060 --> 00:49:34,200 koska - et päädy tarvitse sitä. 522 00:49:34,200 --> 00:49:41,880 F skannaus f on mitä aiot käyttää skannata yli sanakirja. 523 00:49:41,880 --> 00:49:46,370 Ja niin sinun ei tarvitse koodata ylös ratkaisun vain kokeilla ja kuten pseudo-koodi tiesi 524 00:49:46,370 --> 00:50:05,200 ratkaisuun, ja sitten me keskustelemme siitä. 525 00:50:05,200 --> 00:50:14,110 Ja itse asiassa, koska olen jo antanut sinulle nämä, jos menet mihin tahansa terminaaliin tai laitteen on kuori, 526 00:50:14,110 --> 00:50:18,250 Haluaisin - En yleensä - jos et ole nähnyt vielä, en tiedä jos teit luokassa, 527 00:50:18,250 --> 00:50:23,490 mutta mies, niin mies sivut ovat melko hyödyllisiä katsomalla melko paljon mitään toimintoa. 528 00:50:23,490 --> 00:50:27,330 Joten en voi tehdä, kuten, mies f, skannaus f. 529 00:50:27,330 --> 00:50:32,300 Tämä on nyt tietoa skannauksen F perheen toimintoja. 530 00:50:32,300 --> 00:50:37,070 Voisin myös tehdä mies f, avoin, ja että annan minulle yksityiskohtia siitä. 531 00:50:37,070 --> 00:50:40,750 Joten jos tiedät mitä toimintoa käytät tai luet koodin 532 00:50:40,750 --> 00:50:43,000 ja näet joitakin toiminto ja olet kuin, "Mitä tämä tekee?" 533 00:50:43,000 --> 00:50:45,280 Vain ihminen, että funktion nimi. 534 00:50:45,280 --> 00:50:47,340 On olemassa pari outo esimerkkejä, joissa saatat joutua sanoa 535 00:50:47,340 --> 00:50:51,620 vastaavat. Man 2, että funktion nimi, tai mies 3 että funktion nimi, 536 00:50:51,620 --> 00:50:58,230 mutta sinulla on vain tehdä, että jos ihminen funktion nimeä ei tapahdu työskennellä ensimmäistä kertaa. 537 00:50:58,230 --> 00:51:03,010 [Opiskelija] Joten luen man sivun auki, mutta olen silti hämmentynyt siitä, miten sitä käytetään ja ohjelmaa. 538 00:51:03,010 --> 00:51:06,170 Okei. Paljon man-sivut ovat vähemmän kuin hyötyä. 539 00:51:06,170 --> 00:51:08,470 He enemmän hyötyä, jos tiedät mitä he tekevät 540 00:51:08,470 --> 00:51:12,670 ja sitten sinun täytyy vain muistaa järjestyksessä väitteitä tai jotain. 541 00:51:12,670 --> 00:51:17,640 Tai he voivat antaa sinulle yleiskuvan, mutta jotkut niistä ovat erittäin ylivoimainen. 542 00:51:17,640 --> 00:51:22,220 Kuten F skannaus f. myös. Se antaa sinulle tietoja kaikista näistä toiminnoista, 543 00:51:22,220 --> 00:51:28,120 ja 1 rivi tänne sattuu sanoa, "F scan F lukee merkkijonon piste tai stream." 544 00:51:28,120 --> 00:51:32,360 Mutta f auki. Joten, miten käytämme f auki? 545 00:51:32,360 --> 00:51:38,470 Ajatus ohjelman tarvitsee tehdä tiedoston I / O on, että 546 00:51:38,470 --> 00:51:45,070 sinun on ensin avata tiedosto, jonka haluat tehdä asioita, ja väistämättä, 547 00:51:45,070 --> 00:51:51,220 lukea asioita tiedoston ja tehdä juttuja heidän kanssaan. 548 00:51:51,220 --> 00:51:55,350 F avoinna on mitä käytämme avata tiedostoa. 549 00:51:55,350 --> 00:52:04,190 Asia palaamme, niin mitä tiedosto haluamme avata, se antaa meille - 550 00:52:04,190 --> 00:52:11,970 täällä se sanoo "/ käyttäjä / share / dict / sanoja." 551 00:52:11,970 --> 00:52:16,740 Tämä on tiedosto, jonka haluat avata, ja haluamme avata - 552 00:52:16,740 --> 00:52:21,440 meidän on nimenomaan määrittää, haluamme avata lukea tai jos haluamme avata sitä kirjoittaa. 553 00:52:21,440 --> 00:52:26,490 On pari yhdistelmiä ja tavaraa, mutta haluamme avata lukemista varten. 554 00:52:26,490 --> 00:52:29,380 Haluamme lukea tiedostoa. 555 00:52:29,380 --> 00:52:34,290 Joten mitä tämä paluu? Se palauttaa tiedoston tähti (*), 556 00:52:34,290 --> 00:52:37,260 ja minä vain näyttää kaiken muuttuvan f, niin * 557 00:52:37,260 --> 00:52:40,840 uudelleen, se on osoitin, mutta emme halua käsitellä osoittimia. 558 00:52:40,840 --> 00:52:46,470 Voit ajatella F, f on nyt muuttuja aiot käyttää edustamaan tiedostoon. 559 00:52:46,470 --> 00:52:49,850 Joten jos haluat lukea tiedostoa, lukea F. 560 00:52:49,850 --> 00:52:54,820 Jos haluat sulkea tiedoston, suljet f. 561 00:52:54,820 --> 00:53:00,350 Joten ohjelman päättyessä, kun väistämättä halutaan lopettaa, mitä meidän pitäisi tehdä? 562 00:53:00,350 --> 00:53:06,750 Haluamme sulkea F. 563 00:53:06,750 --> 00:53:12,600 Joten nyt viimeinen tiedosto toiminto, että olemme menossa halua käyttää ei skannata f, f scan f. 564 00:53:12,600 --> 00:53:20,930 Ja mitä se tekee on se skannaa tiedoston päälle etsivät kuvio vastaamaan. 565 00:53:20,930 --> 00:53:39,100 Tarkasteltaessa man-sivulla täällä, näemme int f scan f jättää paluuarvo nyt. 566 00:53:39,100 --> 00:53:45,230 Ensimmäinen argumentti on tiedosto * stream, joten ensimmäinen väite aiomme haluat kulkea on f. 567 00:53:45,230 --> 00:53:47,900 Olemme skannaus yli f.. 568 00:53:47,900 --> 00:53:53,680 Toinen argumentti on muotomerkkijonoa. 569 00:53:53,680 --> 00:53:58,310 Annan teille muotomerkkijonon nyt. 570 00:53:58,310 --> 00:54:05,180 Mielestäni tapahtua sanoa, 127s \ n, paljon se on turhaa. 571 00:54:05,180 --> 00:54:12,490 Ajatus siitä, mitä se muotomerkkijonon on, on voit ajatella skannauksen F vastakohta Print F. 572 00:54:12,490 --> 00:54:17,160 Joten print f, tulostus f käytämme tällaista muotoa parametrin 573 00:54:17,160 --> 00:54:25,000 mutta painetussa f mitä teemme on - katsokaamme vastaava. 574 00:54:25,000 --> 00:54:32,550 Joten tulostaa f, ja siellä on todella myös F Tulosta F, missä ensimmäinen argumentti tulee olemaan f.. 575 00:54:32,550 --> 00:54:40,980 Kun tulostat f, voisimme sanoa jotain, "print 127s \ n", ja sitten jos ohitamme sen joitakin merkkijono, 576 00:54:40,980 --> 00:54:44,050 se tulee tulostaa tämän merkkijonon ja sitten uusi rivi. 577 00:54:44,050 --> 00:54:49,690 Mitä 127 tarkoittaa, olen melko varma, mutta en ole koskaan rajoitettu itseäni siihen, 578 00:54:49,690 --> 00:54:52,470 Et edes tarvitse sanoa 127 "in Print f, 579 00:54:52,470 --> 00:54:57,090 mutta mitä se tarkoittaa on tulostaa ensimmäinen 127 merkkiä. 580 00:54:57,090 --> 00:54:59,350 Joten olen melko varma, että asia on näin. Voit Googlelle siitä. 581 00:54:59,350 --> 00:55:03,000 Mutta seuraava olen melkein varma, se tarkoittaa että. 582 00:55:03,000 --> 00:55:08,880 Joten tämä on tulosta ensimmäiset 127 merkkiä, jonka jälkeen uusi rivi. 583 00:55:08,880 --> 00:55:14,680 F scan F nyt sijaan tarkastellaan muuttuvan ja tulostamista, 584 00:55:14,680 --> 00:55:22,620 se tulee katsomaan joitakin merkkijono, ja tallentaa kuvion muuttujaan. 585 00:55:22,620 --> 00:55:26,360 Katsotaanpa itse käyttää skannata f eri esimerkin. 586 00:55:26,360 --> 00:55:31,670 Joten sanokaamme meillä oli joitakin int, x = 4, 587 00:55:31,670 --> 00:55:41,110 ja halusimme luoda merkkijono tehty - Halusimme luoda merkkijono 588 00:55:41,110 --> 00:55:44,250 että oli kuin, tämä tulee esille paljon myöhemmin, 589 00:55:44,250 --> 00:55:49,020 jotain, joka on aivan kuin 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Joten tämä voisi olla ohjelma, jossa sinulla on summa laskuri, 591 00:55:51,870 --> 00:55:56,420 Yhteenvetona Laskurin i, ja haluat tallentaa kasan kuvia. 592 00:55:56,420 --> 00:56:02,430 Joten haluat tallentaa i.jpg, missä i on jokin variaatio teidän silmukka. 593 00:56:02,430 --> 00:56:05,500 Joten miten teemme tätä merkkijono että JPEG? 594 00:56:05,500 --> 00:56:11,720 Jos halusi tulostaa 4.jpg, voisimme sanoa print f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 ja sitten se tulostaa kyseisen JPEG. 596 00:56:14,410 --> 00:56:20,050 Mutta jos haluamme pelastaa merkkijono 4.jpg, käytämme scan f.. 597 00:56:20,050 --> 00:56:30,860 Joten string s - oikeastaan ​​meillä en voi - merkki, char s, mennään 100. 598 00:56:30,860 --> 00:56:35,400 Olen siis vain ilmoitettu joitakin erilaisia ​​100 merkkiä, 599 00:56:35,400 --> 00:56:39,830 ja sitähän me väistämättä olemaan tallentamista että JPEG sisään 600 00:56:39,830 --> 00:56:47,920 Joten aiomme käyttää skannaus f ja muoto, miten sanoisimme% d.jpg 601 00:56:47,920 --> 00:56:54,980 Jotta tulostaa 4.jpg, formaatti tämä tulee olemaan% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Joten muoto on% d.jpg, mitä haluamme korvata% d kanssa on x, 603 00:57:04,020 --> 00:57:06,590 ja nyt meidän täytyy tallentaa merkkijonon jonnekin. 604 00:57:06,590 --> 00:57:12,500 Ja minne olemme menossa tallentaa merkkijono on array s. 605 00:57:12,500 --> 00:57:21,640 Joten tämän jälkeen koodirivin, s, jos me painamme f% s muuttujan s, 606 00:57:21,640 --> 00:57:26,280 se tulee tulostaa 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Joten f skannaus f on sama kuin skannaus f, paitsi nyt se etsii yli tämän tiedoston 608 00:57:38,930 --> 00:57:43,600 mitä tallentamaan s. 609 00:57:43,600 --> 00:57:46,160 Sitähän viimeinen väite tulee olemaan. 610 00:57:46,160 --> 00:57:54,170 Haluamme säilyttää - "Scan f perhe toimintoja skannaa molempien mukaan muodossa kuin yritti alla. 611 00:57:54,170 --> 00:58:02,450 Jos jokin on tallennettu paikkaan kohdissa saatat palata - " 612 00:58:02,450 --> 00:58:12,910 Ei, meillä voisi olla hyvä. Saanen ajatella toista. 613 00:58:12,910 --> 00:58:26,350 Joten skannaus f ei - mitä hittoa on toiminto, joka tekee sen? 614 00:58:26,350 --> 00:58:31,650 Joten skannaus f aio ottaa kokonaisluku ja tehdä piste jpg. 615 00:58:31,650 --> 00:58:43,490 Se tulee [Mumbles]. 616 00:58:43,490 --> 00:58:49,360 Tallenna int muuttuja merkkijono int C. 617 00:58:49,360 --> 00:58:55,940 Mikä on tämä muuttuja, tai mikä on tämä toiminto nimeltään? 618 00:58:55,940 --> 00:59:04,950 Kyllä. That's - kyllä. Joten mitä olin määrittelemällä sinulle ennen oli s print f, 619 00:59:04,950 --> 00:59:09,820 mikä - että paljon järkevämpää, miksi sanoin se oli paljon enemmän kuin tulosta f.. 620 00:59:09,820 --> 00:59:14,700 Scan f on edelleen sellainen kuin print f, mutta s print f aikoo skannata sen yli 621 00:59:14,700 --> 00:59:17,510 ja korvaavat muuttujat ja nyt säilytä se merkkijono. 622 00:59:17,510 --> 00:59:19,620 Sijaan tulostaa, se tallentaa sen merkkijono. 623 00:59:19,620 --> 00:59:25,070 Joten unohda se kokonaan. Voit silti ajatella formaatin määrittely niin kuin että print f. 624 00:59:25,070 --> 00:59:34,510 Joten nyt, jos haluamme tehdä 4.jpg asia, tekisimme s tulostaa f, x tästä. 625 00:59:34,510 --> 00:59:38,520 Joten mitä scan f tekee - mitä kysymykseesi tulee? 626 00:59:38,520 --> 00:59:40,820 [Opiskelija] Olen vain hämmentynyt siitä, mitä me yritämme tehdä täällä 627 00:59:40,820 --> 00:59:43,450 kanssa JPEG. Voitko selittää, että 1 enemmän aikaa? 628 00:59:43,450 --> 00:59:52,710 Joten tämä oli - se on vähemmän relevent F skannaus f nyt, toivottavasti se tie takaisin jonkinlainen tapa. 629 00:59:52,710 --> 01:00:02,240 Mutta mitä minä perin aikoi näyttää oli - tämä on oikeastaan ​​suoraan koske näitä [?? F5] 630 01:00:02,240 --> 01:00:08,520 Tulette käyttää S Tulosta f, missä, sano meillä on 100 kuvaa, 631 01:00:08,520 --> 01:00:13,630 ja haluat lukea kuvan 1.jpg, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Joten jotta tehdä, että sinun täytyy f auki, ja sitten sinun täytyy kulkea merkkijono, jonka haluat avata. 633 01:00:21,520 --> 01:00:30,020 Joten me haluaisimme avata 1.jpg, jotta voidaan luoda merkkijonon, joka on 1.jpg, 634 01:00:30,020 --> 01:00:37,660 teemme s tulostaa f% d.jpg--meillä ei tehdä int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Joten s print f% d.jpg i. 637 01:00:51,130 --> 01:00:56,320 Joten kun tätä linjaa, nyt muuttuja tai matriisi n aikoo 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Tai 0.jpg, 1.jpg, 2.jpg. Ja niin voimme avata puolestaan ​​kutakin kuvaa käsittelyssä. 639 01:01:10,610 --> 01:01:19,550 Niin, että mitä s tulostaa f ei. Näetkö mitä s tulostaa f tekee nyt? 640 01:01:19,550 --> 01:01:25,720 [Student] Okei, joten se vie - se luo merkkijono, something.jpg, ja sitten tallentaa sen. 641 01:01:25,720 --> 01:01:30,360 Kyllä. Se luo - tämä on toinen muotomerkkijonon, kuten skannaus f ja tulostaa f 642 01:01:30,360 --> 01:01:37,530 jos se lisää kaikki muuttujat toiseen väitteeseen, ehkä s eikä i.. 643 01:01:37,530 --> 01:01:42,280 Ehkä - Tarkoitan, näin on. Mutta mitä argumenttien järjestystä on. 644 01:01:42,280 --> 01:01:45,440 Se tulee lisäämään kaikkien muuttujien muotomerkkijonoa 645 01:01:45,440 --> 01:01:52,250 ja sitten tallentaa osaksi puskuriin, kutsumme että puskuri, se missä olemme varastointia merkkijono. 646 01:01:52,250 --> 01:02:00,750 Joten olemme tallentamiseen sisällä s oikein muotoiltua merkkijono,% d on korvattu kanssa 4. 647 01:02:00,750 --> 01:02:08,080 [Student] Joten jos teimme tämän, on muuttuva F juuri menossa jaettava uudelleen? 648 01:02:08,080 --> 01:02:18,110 Kyllä. Joten meidän pitäisi sulkea alkuperäisen F ennen tätä. 649 01:02:18,110 --> 01:02:22,810 Mutta - ja sitten myös, jos ei ole f avata tänne, niin meidän pitäisi sanoa - 650 01:02:22,810 --> 01:02:29,280 Joo. Mutta se avaisi sata erilaista tiedostoja. 651 01:02:29,280 --> 01:02:37,360 [Student] Mutta emme voi käyttää tai - okei. 652 01:02:37,360 --> 01:02:44,230 Okei. Joten skannaus f, f skannaus f on tavallaan sama idea 653 01:02:44,230 --> 01:02:53,610 mutta sen sijaan, vaan tallentaa sen merkkijono, se on enemmän kuin olet nyt 654 01:02:53,610 --> 01:03:02,420 menee yli pisto ja kaavoja vastaan ​​merkkijonon ja varastointi tulokset muuttujiin. 655 01:03:02,420 --> 01:03:11,290 Voit käyttää skannauksen F jäsentää yli jotain 4.jpg, ja tallentaa kokonaisluvun 4 osaksi summa int x. 656 01:03:11,290 --> 01:03:13,430 Se mitä voimme käyttää skannauksen F. 657 01:03:13,430 --> 01:03:16,300 F scan f aikoo tehdä komentoriviltä. 658 01:03:16,300 --> 01:03:19,200 Olen oikeastaan ​​aika varma, että tämä on mitä CS50 kirjasto tekee. 659 01:03:19,200 --> 01:03:29,050 Joten kun sanot, "saada int," se scan F-ta yli - scan f on tapa saat käyttäjän syötettä. 660 01:03:29,050 --> 01:03:34,670 F scan f aikoo tehdä saman mutta käyttäen tiedostoa skannata. 661 01:03:34,670 --> 01:03:41,090 Joten tässä, me skannauksen aikana tämän tiedoston. 662 01:03:41,090 --> 01:03:45,460 Kuvio yritämme sovittaa on joitakin merkkijonon, joka on 127 merkkiä pitkä 663 01:03:45,460 --> 01:03:48,100 seurasi uusi linja 664 01:03:48,100 --> 01:03:54,770 Joten olen melko varma, että voisimme jopa sanoa "täsmää s" koska sanakirjassa 665 01:03:54,770 --> 01:03:57,770 meillä sattuu olemaan, olemme taatusti ole sana on niin kauan, 666 01:03:57,770 --> 01:04:03,310 ja myös f skannata f, luulen, pysähtyy uuden linjan mitä. 667 01:04:03,310 --> 01:04:06,970 Mutta me ovat uuden linjan ottelu, ja - 668 01:04:06,970 --> 01:04:13,960 [Student] Jos emme ole uuden linjan, eikö löytää osia sanan? 669 01:04:13,960 --> 01:04:22,900 Se - jokainen - katsot sanakirjassa - 670 01:04:22,900 --> 01:04:26,200 Joten sanakirjasta, nämä ovat kaikki sanamme. 671 01:04:26,200 --> 01:04:30,500 Jokainen on uusi rivi. 672 01:04:30,500 --> 01:04:32,510 Scan f menossa hakemaan tätä sanaa. 673 01:04:32,510 --> 01:04:38,750 Jos emme ole uuden linjan, niin se on mahdollista, että seuraava skannaus f on juuri lukenut uuden rivin. 674 01:04:38,750 --> 01:04:44,180 Mutta myös uusien rivi silloin vain sivuuttaa uusi rivi. 675 01:04:44,180 --> 01:04:49,440 Mutta emme koskaan saa osan sanasta, koska olemme aina lukemaan jopa uuden linjan, ei väliä mitä. 676 01:04:49,440 --> 01:04:54,530 [Student] Mutta entä jos etsit sanaa "cissa", kuten cissa. 677 01:04:54,530 --> 01:04:57,380 Tuleeko se löytää sen, ja sano se ottelu? 678 01:04:57,380 --> 01:05:05,110 Joten tässä me - se luetaan - tämä on todella hyvä asia. 679 01:05:05,110 --> 01:05:10,660 Emme koskaan käyttää nykyistä - sana etsimme on ensimmäinen komentorivillä. 680 01:05:10,660 --> 01:05:16,460 Joten string, sana = argv 1. 681 01:05:16,460 --> 01:05:20,020 Joten merkkijono etsimme on argv 1. 682 01:05:20,020 --> 01:05:23,290 Emme ole etsimässä sanan kaikissa meidän skannaus f. 683 01:05:23,290 --> 01:05:28,030 Mitä teimme skannaa f on saada jokaisen sanan sanakirjasta, 684 01:05:28,030 --> 01:05:34,320 ja sitten kun meillä on tuo sana aiomme käyttää strcmp vertailla niitä. 685 01:05:34,320 --> 01:05:39,210 Aiomme vertailla sanamme ja mitä juuri lukenut tuumaa 686 01:05:39,210 --> 01:05:45,110 Joten väistämättä, menemme päätyä tekemään kasan scan fs 687 01:05:45,110 --> 01:05:52,130 kunnes se vain niin, että skannaus f palaa - 688 01:05:52,130 --> 01:05:54,800 se palaa yksi, niin kauan kuin se on sovitettu uusi sana, 689 01:05:54,800 --> 01:06:01,360 ja se palaa jotain muuta heti, kun se on jättänyt vastaavat sanan. 690 01:06:01,360 --> 01:06:08,440 Luemme koko sanakirjan, varastointi rivi jokaisen sanan muuttujaan s. 691 01:06:08,440 --> 01:06:17,240 Sitten olemme vertaamalla sanan s, ja jos vertailu == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp sattuu tuomaan 0, jos ottelu on tehty. 693 01:06:21,650 --> 01:06:31,510 Joten jos se oli 0, niin voimme tulostaa f, Hyväksytty, 694 01:06:31,510 --> 01:06:35,370 tai sana on sanakirjassa, tai mitä haluat tulostaa f.. 695 01:06:35,370 --> 01:06:41,450 Ja sitten - emme halua f sulkea uudestaan ​​ja uudestaan. 696 01:06:41,450 --> 01:06:50,410 Tämä on sellainen asia, mitä haluamme tehdä, ja emme vain etsivät sanan sanakirjasta. 697 01:06:50,410 --> 01:06:56,660 Joten me voisimme tehdä, että jos me halusimme etsiä niiden malli, cissa, kuten sanoit aiemmin, 698 01:06:56,660 --> 01:07:00,260 jos halusimme etsiä että malli, sitten se epäonnistuu, jos 699 01:07:00,260 --> 01:07:08,010 koska se ei ole oikeastaan ​​sana, mutta yksi sanoja, sattuu olemaan, että siinä. 700 01:07:08,010 --> 01:07:13,560 Joten se vastaisi tämän sanan, mutta tämä osajoukko sana ei ole sana itse. 701 01:07:13,560 --> 01:07:17,250 Mutta se ei ole, miten käytämme sitä, me luet jokaisen sanan 702 01:07:17,250 --> 01:07:19,740 ja sitten verrataan sana meillä on tuo sana. 703 01:07:19,740 --> 01:07:25,780 Joten olemme aina vertaamalla täynnä sanoja. 704 01:07:25,780 --> 01:07:29,620 Voin lähettää viimeistelty ratkaisut myöhemmin. 705 01:07:29,620 --> 01:07:32,050 Tämä on tavallaan lähes oikea vastaus, luulen. 706 01:07:32,050 --> 01:07:34,720 [Student kommentti, käsittämättömällä] 707 01:07:34,720 --> 01:07:40,870 Ai, minä eroon, että ennen? Char s, kai me sanoimme 127 - Unohdan mitä suurin on. 708 01:07:40,870 --> 01:07:44,100 Me vain tehdä 128, joten nyt s on riittävän pitkä. 709 01:07:44,100 --> 01:07:46,570 Meidän ei tarvitse tulostaa mitään. 710 01:07:46,570 --> 01:07:56,440 Olemme myös menossa haluavat sulkea meidän tiedoston, ja että pitäisi olla noin oikea vastaus. 711 01:07:56,440 --> 01:07:59,440 CS50.TV