[Powered by Google Translate] Oddelek Problem Set 2: Hacker Edition
Rob Bowden, Harvard University
To je CS50. CS50.TV
Torej, jaz sem Rob. Jaz sem višji v Kirkland. To je moj tretji letnik TFing CS50.
To je prvič, da smo spremenili iz tradicionalnih-predavanje-style oddelka,
kjer smo nekako pregleda, kaj se je zgodilo v predavanju, nato pa fantje postavljajo vprašanja,
zdaj pa veliko bolj problemsko, kjer bomo uporabili prostorov in -
Oh, to je ideja, da gredo na to povezavo sem vam ga poslali, in potem boš v mojem vesolju.
Ali kdo nima laptop? Ok.
Torej bomo uporabljali to in bomo opravljali težav živi v oddelku
in jih obravnavati in ugotoviti, kaj je narobe
in lahko potegnem gor nekaj kode, jaz bi razpravljali vaše ideje.
Torej je kdo imel težave?
Lahko klepetate ob strani, ne vem, če bomo imeli razlog za to.
Zdaj, kot prejšnje supersection, če ste bili v tem razredu, saj veste, kaj to je vse.
Na vseh sklopov P pa se dogaja, da se ti oddelki.
Torej P-set 2, specifikacije, mislim, da ste jo videli na P-set 1 že.
Ampak mi lahko ogledate na P-2 set za to, kar bomo lahko šli čez danes.
In boste videli del vprašanj.
Torej bo to v vseh P-sprejemnikov, da bo del vprašanja.
Do sedaj smo rekel: "Predstavljajte si to priložnost za vajo."
Če se ne bo zahtevalo, da predloži ta program.
Ideja je, da to naj bi nekakšno boste lažje začeli z nizom problemov.
Mislim, da na Hacker različico, veliko od njih naj bi bilo le nove, zanimive stvari, da se učijo.
Ne smejo biti neposredno za problem niz.
In sedaj ne bomo ob vam jih, ampak v teoriji,
za poznejše sklopov težav, lahko jih, in tako lahko pridobijo bodisi z oddelkom
ali pa si oglejte razdelek, da bi dobili odgovore, ali pa samo zaslužiti jih sami
Če se ne počutite kot uživa mojo prisotnost.
Torej - mislim, da je to prvi.
Oh. Tudi v teh oddelkih vprašanj smo si postavljajo vprašanja o kratkih hlačah.
Tako da mislim, v teoriji, moraš gledati jih, preden pride do točke,
ampak to je v redu, če ne, bomo šli nad njimi vseeno.
Torej, lahko začnemo z njimi: "Kako pa zanko razlikujejo od do-while zanko?
Ko je slednji še posebno koristno? "
Torej, kdo sploh -?
[Študent] do-loop, medtem ko bo vedno izvede vsaj enkrat.
Da. Tako, da je razlika. While zanko - Jaz bom samo to tukaj - while zanko, imamo stanje
Tukaj je, ker ne dela, medtem ko ne boste imeli stanje, dokler ne pridemo dol.
In tako, ko je vaš program je izvajanje in pride do while zanko,
nemudoma preveri, ali je ta pogoj izpolnjen.
Če ta pogoj ni res, bo to samo preskočiti zanke v celoti.
Do-while zanko, kot je program izvršitve, da pride do "do".
Nič se ne zgodi v tem trenutku le še izvršitve.
Potem, ko je zadela ", medtem ko", če je pogoj izpolnjen, bo to zanko nazaj in še enkrat
in spet in spet, dokler se stanje ne drži, in šele nato pade skozi.
Torej, razlika je v tem, da lahko to preskočite že od samega začetka.
To nujno izvede enkrat in potem se lahko izvede večkrat, če je izpolnjen pogoj še vedno drži.
Tako bo, medtem ko zanke le to storil takoj, ali - while zanko - morda ne bomo potrebovali, da to storite na vse,
saj takoj, ko bomo prišli do njega, če pogoj ni izpolnjen, se bomo le preskočite desno nad njim.
Ker je do-while zanko, ga bomo izvršiti takoj, nujno.
Potem, ko smo prišli do stanja, da preverite, če je to res ali ne.
Če je to res, bomo še enkrat, če je napačna, bomo samo še naprej.
Torej, ko je slednji še posebno koristno?
Torej lahko rečem, da je v celoti na 4 leta, 3 leta, ne glede,
da sem bil načrtovanje, sem uporabil to, kot, manj kot 10-krat.
In verjetno 5 od njih so CS50 ko smo uvajanje do-while zank.
Torej, kdaj ste se do-while zank?
Ko je - ja?
[Študent] Če hočeš, da se vnos uporabnika ali kaj želite preveriti -
Ja. Torej ne, medtem ko zanke, uporabniški vnos je velik.
Zato je v prvih sklopov problemov nekaj, če želite od uporabnika, recimo,
"Daj mi niz," se ne more nadaljevati, dokler ne boste dobili, da niz.
In tako nujno, je treba vprašati za niz vsaj enkrat.
Ampak potem, če odgovorite kaj slabega, potem morate zanko nazaj in vprašal še enkrat.
Ampak razen povratnih informacij uporabnikov, to je zelo redko, da sem naleteli na primer,
če želim zanke "najmanj enkrat", ampak morda še več.
Vprašanja ali -? Je kdo uporablja do-while zanko kje drugje?
Ok. Torej, naslednjič, je: »Kaj pa neprijavljeno identifikator
običajno navedejo, ali izhodne jih Jek? "
Torej, kakšno oznako bi lahko napisala, da bi dobili "na črno oznako?"
[Študent] To x = 2?
Tako smo lahko samo poskusil sem, x = 2.
Mi bomo teči to - oh, nisem še. Torej, tukaj smo dobili - vse v redu.
"Uporaba neprijavljenih x identifikatorja."
Tako da je neprijavljeno identifikator, spremenljivka.
To bo pogosto zahtevajo različno identifikator.
Tako da ne bi vedel, da je dejansko spremenljivka, vendar pa ne vem, kaj je.
Torej je oznaka.
Torej, zakaj je črno? Ja.
Zato mora biti jasno, o terminologiji, deklaracijo spremenljivke
je, ko rečeš "INT x" ali "niz Y," karkoli.
Inicializacija spremenljivke, ali odstop spremenljivke,
je, ko rečeš "x = 2".
Tako bomo lahko opravite v posameznih fazah, int x, x = 2, in dokler - lahko imamo kup stvari tukaj -
ampak dokler ta postavka se zgodi, je še vedno x nezaceto, vendar pa je bila razglašena.
In tako bomo lahko seveda to storite v 1 linijo, in zdaj smo se obračunajo in inicializacijo.
Vprašanja?
In končno, "Zakaj je Cipher Cezar ni zelo varen?"
Torej, najprej, ali ima kdo rad povedal, kaj Cipher Cezar?
[Študent] Caesar Šifra prav je, da ste map, premaknete vsako pismo,
določeno število črk tja, in se vrnil konec, in to ni zelo varno, saj
tam je le 26 možnih opcij in boste morali poskusiti vsak 1 od tistih, dokler ga ne dobiš.
Oh. Torej, naj ponovim?
Caesar Cipher, it's - mislim, boste morali ukvarjati z njo na težave, ki vas -
ali Mislim, standardno izdajo problemskega sklopa, ki je ni na hacker različico.
Tako na standardno različico na problem niz, boste dobili sporočilo, kot so, "Hello, world"
in imate tudi več kot 6 let, in ste vzeli to sporočilo, in vsak posamezni znak,
ga zavrtite za 6 mest v abecedi.
Tako naj bi bila "h" v zdravo postal h-i-j-k-l-m-n.
Tako bi se prva črka n. Mi isto stvar z e.
Če imamo, recimo, z ali nekaj podobnega, nato pa zavijemo nazaj na "okoli".
Toda vsak lik dobi preklapljajo 6 znakov kasneje v abecedi, in to ni zelo varen
saj so le 26 Možnosti za koliko načinov lahko zavijete eno črko.
Torej si lahko samo poskusil vseh 26 od njih in verjetno za dovolj dolgo sporočilo,
samo 1 od teh možnih 26 stvari, ki se bo čitljiva,
in čitljive 1 se bo izvirno sporočilo.
Torej, to ni zelo dober način za šifriranje ničesar.
Nepovezani teh kratkih hlačah, "Kaj je funkcija?"
Torej, kaj je funkcija? Da.
[Študent] To je kot poseben kos kode, ki jo lahko pokličete, da gredo skozi, nato pa dobil vrnjeno vrednost karkoli.
Ja. Torej bom odgovoriti, tudi z odgovorom na naslednja - ali ponovitev jih tudi preprosto odgovorite na naslednjo.
Lahko uporabite funkcije in ne le kopiranje in lepljenje kode znova in znova.
Vzemi to kodo, jo dal v fuction, nato pa lahko pokličete na telefonsko funkcijo
kjer ste bili kopiranje in lepljenje.
Torej funkcije so koristne.
Torej, zdaj bomo naredili konkretne probleme.
Prvi. Tako je zamisel o prvi je, da si dajati niz, in ne glede na -
ali piše samo male? To ne pomeni samo male.
Tako lahko sporočilo lahko karkoli, in - oh, ne. To počne.
"Zaradi enostavnosti, lahko predpostavimo, da si bo le vnos male črke in presledki."
Tako smo dajati sporočilo s samo malimi črkami, nato pa izmenično
med velikimi in malimi črkami - spremenimo niz za velike in male, izmenično.
Torej, preden smo vam sekundo celo potopite v težave,
Kaj je prva stvar, ki jo morate storiti?
Oh, kaj sem pravkar kliknite na? Oh, sem kliknil na e-pošto v tukaj.
Torej prva stvar, ki jo morate storiti - gledam na napačnem 1?
Je to del tega?
Ne, to so še vedno tam, čeprav.
Ok, še vedno tu.
Zdaj ne moremo prevzeti -? Da. Tu ne moremo domnevati, da je to samo male črke in prostor.
Torej, zdaj imamo opravka z dejstvom, da se lahko z višino črk, kar hočemo, da so.
In tako prva stvar, ki jo želite storiti, je le dobil sporočilo.
Vedeti pa je treba, da bi dobili niz, String s = GetString, v redu.
Zdaj je to problem, obstaja nekaj načinov za njihovo početje.
Ampak bomo želeli uporabljati bitni izvajalce tukaj.
Ali obstajajo ljudje, ki bodisi niso bili na supersection,
ali kaj podobnega, in ne vem, kaj bitni operaterji?
Ali kako so povezani z ASCII na kakršen koli način?
[Študent] nisem bil na supersection, ampak vem, kaj bitni subjekti.
Ok. In potem mi ni treba iti čez osnove od njih, ampak bom razložiti
kaj bomo želeli, da tukaj uporabiti.
Torej "A": Binarno zastopanje kapitala A, številka 65.
Grem gledati - 41 se bo 01000001.
Tako bi moralo biti 65 v desetiško, tako da je to binarna predstavitev kapitala znakov A.
Zdaj, binarna predstavitev značaja male črke "a"
gre za isto stvar, skoraj. Je to - 6, ja. To je v redu.
Torej, binarna kapital, binarni male "."
Torej, opazil, da je razlika med A in "a", je to ena malo.
In to se dogaja, da je 32-bitna, bit predstavlja število 32.
In to je smiselno, saj je 65, "a" 97.
Razlika med njima je 32.
Tako zdaj vemo, da lahko pretvorite od A do "A", s tem,
bitni in ga oring, z -, ki izgleda kot 1.
To je bitni ali z 00100000, in da bomo dali nas '. "
In bomo lahko dobili od "A", ki jih bitni ANDing
z 11, 0 v tem mestu, 11111.
Torej bo to potem nam kaj '"je bil, toda to izniči individualno bit,
zato bomo morali 01000001, ne vem, če sem računal prav.
Toda ta tehnika bitni oring dobili od kapitala v male črke,
bitni in ANDing, da se od male do kapitala ni izključna A.
Vsi dopisi, K vs k, Z vs Z,
vsi so le, da bo razlikoval za to eno samo bit.
In tako lahko uporabite to s katerega koli malo črko za vsako črko in obratno.
Ok. Torej preprost način, kako iz tega - tako, namesto da bi
pisati o vsem, kar je 1011111 - enostaven način predstavlja to številko, in to ni eden
da sem šel v supersection, ampak Tilda (~) je še en bitni operator.
Kaj pa ~ je videti na bit zastopanja.
Vzemimo poljubno število.
To je le nekaj binarno število, in kaj ~ ne gre samo za prezrcali vse bitov.
Torej, to je bilo 1, zdaj 0, to je 0, zdaj 1, 010100.
Tako, da je vse ~ ne. Tako 32 se bo število - znebiti, da -
Tako 32 se bo število 00100000, in tako ~ tega se bo
to število se tukaj, da sem anded "A" s.
Ali vsi videli? To je precej pogosta, kot takrat, ko želite ugotoviti,
za poznejše stvari, ki bi jih lahko videli, če želimo, da vidim, če -
ali pa želimo vse, vsak bit nastavljeno, razen za 1
ste nagnjeni k ne ~ na vajetih, da ne bomo želite določeno.
Torej si ne želimo, da 32 bitni niz, tako da nam ~ od 32.
Ok. Tako lahko uporabimo vse, tukaj.
V redu, v redu, če ne boste storili, se bomo počasi hodi več skupaj,
ali hojo nad tem, da - skozi to. Sprehodite se skozi to.
Torej, imamo niz, in želimo, da zanke nad vsakim znakom v tem nizu in narediti nekaj za to.
Torej, kako bomo zanke v nizu? Kaj naj uporabimo?
Ne bom, da to storite tukaj. Ja.
Torej imam iterator, in mu je rekel, ampak kako naj vem, koliko znakov v nizu?
Strlen (e), nato pa sem + +.
Torej, kaj sem naredil tukaj ni najboljši način stvari.
Ali kdo ve zakaj?
Ker ste preverjanje jezik niza vsak čas.
Torej se bomo, da želite premakniti strlen, bi lahko rekel sem, int dolžina = strlen (e),
in se nato i <dolžino, in v primeru, da ga niso videli,
Jaz bi tudi naredil int i = 0, dolžina = strlen (e).
In tako se je nekoliko bolje, saj zdaj sem se omejila obseg
za različno dolga, da le ta "za" zanko, namesto da bi jo pred razglasitvi
in da vedno obstaja, in v primeru, da niste ujeli, zakaj je to slabo,
ali zakaj je bil prvotni slabo, it's - začeti izvajati v zanki.
Preveril sem stanje. Je i <dolžino s?
Torej, koliko sekund, kaj je delati z "zdravo" ves čas.
Torej dolžina ih, h-e-l-l-o. Dolžina je 5.
Torej, i = 0, dolžina je 5, tako da i ni <5, tako da se zanka nadaljuje.
Potem pa smo spet tam. Mi preverite stanje. Je i <dolžino halo?
Torej, poglejmo, koliko zdravo. H-e-l-l-o. To je 5, i ni <5, zato smo še enkrat.
Tako smo izračun, smo se pozdravi štetje, za vsako ponovitev zanke,
celo mislili, da ne bo nikoli spremeniti, da se bo vedno 5.
Zato smo se samo spomnite 5 spredaj in zdaj je vse bolje.
Torej ponavljanjem v celotnem nizu.
Kaj želimo narediti za vsak znak niza?
[Student povedano, nerazumljiv]
Ja. Torej, če je znak, ki niso po abecedi, potem pa samo želim, da jih preskočite.
Ker smo samo skrbi črkah abecede, ne moremo izkoristiti številko.
Torej, kako lahko to storimo? Torej, naš pogoj, da če hočemo kaj - preverite, če je po abecedi.
Torej, kako bomo to preverili?
[Študent] Saj lahko uporabiš funkcijo je alfa.
Je to vključeno v eno od teh, ali so, kot char.h, ali kaj?
Nikar ne uporabljajte je alfa funkcija in uporaba izrecno -, da smo s [i],
da je 8. značaj sekund, se spomnite, da niz je niz znakov,
Tako 8. značaj je.
Zdaj, če je črka, vemo, da mora biti v določenem območju.
In kaj je to območje?
Ja. Torej, če je [i] je ≥ 65 in s [i] ≤ 90, je, kaj naj storim namesto tega?
Ja. Torej si absolutno ne bi smela nikoli tudi ni treba vedeti ASCII vrednosti vsega doslej.
Nikoli ne mislim številk 65, 90, 97 in 102, ali karkoli že je.
Vi ne potrebujete - 112 - vam ni treba vedeti, tisti sploh. To je narobe preveč.
Uporabljajte samo eno quote znakov, posamezne konstante citiram. Torej "A" in manj kot 90, "Z."
In to je bistveno bolje - ne vem off vrhu moje glave, ki je 90 Ž.
Vem off vrhu moje glave, da je "Z" je kapital Z.
Tako dolgo, kot je to v razponu od kapitala v kapitalske Ž, ali pa lahko preverite malimi črkami,
Ali pa, če je to v območju ≥ "a" in ≤ z.
Tako, da je naše stanje.
Slog, kam dati te stvari spreminjajo.
Jaz bom to naredil takole.
Zdaj, kaj želimo storiti?
Vemo, da to pismo je znak, črka abecede.
Zato moramo izbirate med tem, ali bi to zdaj črka ali male črke.
Kako bomo spremljali katero si želimo, da bi bilo?
[Študentski glasovi, nerazumljivi]
Torej, ja, ampak naj preverim.
Modul 0-2 je dejal, je predlog vrgli ven, in s tem se strinjam.
Razen obvestila, da je, kot je - se to dogaja? Ja.
To je vse drugo, ampak ne moremo modul 2, i ali i mod 2, saj
opazili, da je E kapital in "a" male? Ampak tam je prostor, jih ločite?
Tako da boš isti mod 2, ampak oni so različni primeri.
[Student vprašanje, nerazumljiv]
Ja. Tako smo šele tekoč, da štetje.
Mi lahko storite tudi, da je tukaj, če želimo, da bi dobili malo upočasnila
v zanki za izjave, bom dal gor.
Torej, int count = 0 začne pri.
In zdaj, bom prešteti, koliko črki, ki smo jih imeli.
Torej bomo neizbežno, da računajo + +, saj smo našli še eno črko.
Ampak, zdaj praviš, če štetja mod 2.
Pa kaj, če Število mod 2? Oh. Jaz bom == 0 za zdaj.
Prav tako bomo iti čez to. Torej, če Število mod 2 == 0, kaj pa potem?
[Študentje odgovarjajo, nerazumljivi]
Zato želimo, da končajo velike črke.
Obstajajo primeri, 2, velikimi in malimi črkami sta 2 primera.
Torej, če smo z malimi črkami moramo, da bi bilo veliko začetnico.
Če je velika črka nam ni treba storiti ničesar.
Ampak, ali obstaja način - shouldn't so zrcaljeno -
da sploh ne potrebujete, da preverite, ali je to velike ali male?
Kaj lahko storimo, da vedno poskrbite, da smo na koncu vedno v velikimi črkami?
Torej, opazil, kaj smo naredili za male črke "a", kaj pa če smo to točno isto stvar z veliko začetnico?
Ali veliko začetnico spremembe, ali pa je vrednost spremembe?
Ja. Torej, vsaka črka bitni anded s ~ 32 se bo, da je isti lik velike črke
ker za vsak veliki znak je 32. bit ni določen.
Torej, če želite, da bi znak s [i], želimo, da postane male ali velike črke.
Torej, če je bil male, je zdaj velika črka, če je bila velika črka, je še vedno velika črka, in to je to.
Rekel sem, da je to v supersection: Uporabite lahko 32, če hočeš, ampak jaz ponavadi raje delaš "A" -,
namesto samo navaden 32, saj je lahko katera koli druga bit.
Po 32 bit, je lahko katera koli od njih, ali pa ne bi imela dovolj
Številke za zastopanje vseh znakov.
Torej, če dobiš 32 bit, lahko pomeni tudi 64 bitov, bi lahko postal 128-bitno.
Vsak od teh bitov je lahko bit, da razlikuje med velikimi in malimi črkami.
Jaz ne bi bilo treba vedeti, da je 32-bitna.
Lahko uporabite to 'a' -, da bi dobili nekaj, ki se razlikuje med dvema
ne da bi morali zanašati na čarobno številko, ki je 32.
In zdaj, sicer šteje bilo čudno, in kaj hočem narediti?
[Študentski odgovori, nerazumljiv]
[Študent] Kaj je to?
Jaz bom to naredil v 1 sekundi.
Torej, zdaj, če hočem - hočem prepričati znak je zdaj male,
in tako sem lahko ali 32 in 32 pomeni "" - A.
Ampak obvestilo, ki ga isti obrazložitvi kot prejšnja, da če
pismo je bilo že male, nato pa oring z 32 le ohranja male črke.
To se ni spremenilo prvotni značaj.
Ampak zdaj nimam, da bi se izognili rekel: "Če je malih, pozabi na to,
če je velika črka, nato pa ga spremeni. "
To je veliko bolj primeren za to.
[Študent], bi ta strategija odšteje velike črke z malimi dela, če ne bi bilo 32?
Če bi bil, recimo, 34 ali kaj podobnega?
Torej, morate vedeti, da je razlika med 2 je -? >> 1 bit.
Lahko bi bilo več kot 1 bit, dokler vse bitov pod to postavko so enaki.
Zato moramo vsaj 26 znakov - ali je 26 znakov.
Zato moramo vsaj 26 številk predstavlja razliko -
Razlika med in "a" mora biti vsaj 26,
ali pa si ne bi predstavljal vse kapitalske številke.
To pomeni, da, če bomo začeli na 1, da se bo uporaba vseh teh bitov,
vseh teh prvih 5 bitov, ki zastopa vse do Z.
Zato je naslednji bit, ali je to malo, naslednji bit je tista, ki je odločila, da razlikovanje med in "."
To je tudi razlog, v ASCII tabeli, je 5 simboli ločijo velike črke od malimi črkami.
Ker so to simboli, dodatni 5, ki prikliče v 32 pa je razlika med njima.
[Študent] Torej bi lahko to naredil, ker je ASCII zasnovan na tak način.
Da. Ampak ASCII - razlika je lahko tudi oba bitov.
Všeč mi je, če so bili 10000001, in "a" je 11100001 - Pozabil sem, karkoli.
Ampak, če bi bilo tako, potem bi lahko še vedno uporabljajo "A" - A.
To je samo zdaj je razlika med A in "projekt" še ti 2 bitov.
Mislim, da je napisal 48. Ali je 32 + 64? Mislim, da je?
To bi bila še vedno 2 bitov, vsak znak, recimo, Z in Z, K in K
so še vedno enake točno določene nastavke, razen za tiste 2 bitov.
Tako dolgo, kot je to vedno drži, ne glede na to, če ste z uporabo ASCII ali kakšen drug sistem,
tako dolgo, kot da je samo niz število bitov, ki so različni za vsak znak,
torej, da deluje v redu.
To je samo, da je bil 32 ustanovljen zato, ker je prva smo lahko morebiti uporabite. >> Kul.
Jaz ponavadi raje, v primeru, da še niste videli, če je blok je le ena vrstica,
lahko znebiti zavite oklepaje, zato sem ponavadi raje to.
Prav tako boste vedeli, kako lahko naredimo stvari, kot je s [i] + = 1?
To lahko storite tudi s [i] = 32 bitni IN.
In bitni ALI = 32.
Poleg tega računajo mod 2 == 0.
Torej, ne pozabite, da je - ne bom napisal - vsaka vrednost pa je res, da je 0 false.
Torej, "če Število mod 2 == 0", je isto, kot pravi, "če ne upoštevajo mod 2."
Jaz bi verjetno le obrnil linij in rekel, "če Število mod 2,
storite ALI 1, sicer pa AND 1 ", tako da mi ni bilo treba" ne ".
Ampak to deluje prav tako dobro.
In kaj še lahko naredim tukaj?
Lahko jih združimo z ternarni, če si hotel, potem pa, da bi samo, da se stvari umazani
in verjetno bolj težko prebrati, tako da ne bomo storili.
Vsakdo ima kakšne druge predloge?
Je to vse težave prosil za? Oh ja.
Torej, da se znebite teh praznih vrstic, zdaj bomo natisniti f% s čemer eden za godala,
Mi bo izpisal f, S.
Zdaj pa jo vodijo. Sem naredil kaj narobe?
To je \ "Hočem n.
Ok. Zdaj ga bomo teči. To bo verjetno kričati name.
Strlen v string.h.
Torej, to je lepo stvar o Jek je tisto, kar vam pove, da je v,
Namesto GCC, ki samo pravi: "Hej, pozabil si nekaj, ne vem, kaj je bilo."
Vendar bo to povej mi, "si mislil, da so string.h."
Torej, nisem prosil za nič, tako da ne pove ničesar.
Toda potrudili se bomo njihovemu zgledu, "se zahvaljuje 4 dodatka".
To izgleda v redu. Hura.
Torej se vračajo v vaš glavni, skoraj nikoli naredil.
To je neobvezno. In glavna funkcija je edini, za katerega je obvezna.
Če ne vrne nič od glavnega, to je domneva, da si mislil, da se vrnete 0.
Vprašanja?
Ok. Torej, zdaj druga težava.
"Recall od drugega tedna 2 v predavanju, ki swapping 2 spremenljivk" vrednote, ki jih uspešno
te spremenljivke 2 do funkcije (čeprav se imenuje swap) ne deluje ravno, vsaj ne brez "kazalca."
In prezreti nasvetov dokler ne pridemo do njih.
Želimo, da bi zamenjali 2 spremenljivk, ne bomo s funkcijo, da to storite.
Še vedno se dogaja, da to storite v glavnem tako kot piše.
Vendar pa uporaba teh 2 spremenljivk, ne želimo uporabljati začasno spremenljivko.
Obstajata 2 načina, da to storijo.
To lahko storite z uporabo svoje tradicionalne binarne subjekti.
Torej, ali kdo ve, hiter in umazan način, kako to?
To bi dejansko lahko traja nekaj minut razmišljanja. Če imam -
Bom nastavil problem gor, kot da vprašaš. Torej, če imam 2 spremenljivk, ki je pravkar celo
da so mi dali, B vsota spremenljivka, ki je še celo, da sem jaz dati.
Torej, če imam teh 2 spremenljivk, zdaj želim, da jih swap.
Tradicionalni, z uporabo svoje redne binarnih subjektov, mislim, tako kot +, -, ÷.
Ni bitni subjekti, ki delujejo na binarni.
Torej z -, +, ÷ in vsi, ki.
Lahko bi zamenjal s tem, nekaj podobnega = a + b in b = a - b, a = - b.
Torej, sanity preverite, nato pa bomo videli, zakaj to deluje.
Recimo = 7, b = 3, potem a + b se bo 10.
Torej smo zdaj določitvi = 10, nato pa delamo b = a - b.
Tako delamo b = a - b, ki se bo 7. in b = a - b spet,
ali = a - b. Ki se bo 10-7, ki je 3.
Torej, zdaj, pravilno, "" je bil 7, b je bil 3, in zdaj je 7 in b "a" 3.
Tako, da nekako smiselno, "" je kombinacija med 2 številk.
Na tej točki, "" je kombinacija, nato pa smo se odšteje od izvirne b,
in potem smo se odšteje, kaj je bil prvotni '. "
Ampak to ne deluje pri vseh številkah.
Da bi videli, kaj menijo, da sistem, tako da smo ponavadi mislijo števil kot 32 bitov.
Oglejmo si nekaj, kar je samo kot 4 bitov.
Upam, da sem prišel do dober primer zdaj.
Torej, vem, to bo enostavno.
Recimo, da naši 2 številke 1111 in 1111, tako da smo v binarni zdaj.
V dejanskih decimalk, če želite, da razmišljajo o tem, da način, = 15 in b = 15.
In tako smo pričakovali, ko smo jih swap - niti ne morajo biti enake številke,
vendar sem na ta način.
Dajmo jih, da ni enake številke. Naredimo 1111 in 0001.
Torej = 15 in b = 1.
Ko smo jih zamenjali, pričakujemo, da bo "a", da je 1 in b, da je 15.
Torej, naš prvi korak = a + b.
Naše številke so le 4 bitov široko, tako da "," ki je 1111, + b, ki je 0001,
se bo končalo 10.000, vendar imamo samo 4 bitov.
Torej, zdaj = 0.
In zdaj smo želeli določiti b = a - b - pravzaprav je to še vedno izšlo odlično.
= - b - poglejmo, če to deluje odlično.
Torej b = 0 - 1, ki bi bila še vedno 15 in nato = - b, kar bi bilo 1.
Mogoče to ne dela.
Počutim se kot, da je razlog, da ne dela z rednim.
Ok, tako da deluje na predpostavki, da ne bo delovalo z rednim poslovanjem binarne,
in bo iščem - bom Googlu, da vidim, če je to res.
Zato želimo, da to storite z uporabo bitni izvajalcem, in tukaj je namig XOR.
Torej, uvajanje XOR (^), če še niste videli.
To je, še enkrat, upravljavec bitni, tako da deluje malo po malo, in it's -
Če imate bita 0 in 1, potem bo to 1.
Če imate bitov 1 in 0, bo to 1, imate bita 0 in 0, da bo 0,
in če imate bitov 1 in 1 bo pa 0.
Torej je všeč ali ne. Če katera izmed bit res, to je 1, vendar za razliko ali pa ne more biti tako bitov, ki so res.
Ali bi bilo to 1, bi morali to XOR 0.
Torej bomo želeli uporabljati XOR tukaj.
Pomislite za trenutek, grem na Google.
No, ne moreš prebrati, da, jaz sem trenutno na swap XOR stran algoritmov.
Upajmo, da bo to razložiti, zakaj sem moreš -
To je točno algoritem, ki smo ga pravkar storil.
Še vedno ne razumem, zakaj - Najbrž sem samo izbral slab zgled,
vendar je to primer, ko "" se je zgodilo, da postane 0, po prihodu na 5 bitov, tako da zdaj "" je 0,
da je tisto, kar se imenuje "integer overflow."
Po Wikipedia, "Za razliko od XOR zamenjave, ta sprememba zahteva, da uporablja nekatere metode
zagotoviti, da x + y ne povzroči celo število prekoračitev. "
Torej, ta pa ima težave, kar je bilo celo preliv, vendar sem naredil kaj narobe.
Nisem prepričan. Jaz bom poskusil priti gor z drugo.
[Študent] No, ni celo do izlitja, ko ste poskušali dati nekaj tam
večji od zneska, ki ste jih dodeljenih bitov?
Ja. Imamo 4 bitov. That - imeli smo 4 bite, nato pa smo poskušali dodamo 1 do njega, tako da smo na koncu z 5 bitov.
Toda 5. bit dobi le prekinil, ja.
To bi lahko dejansko -
[Študent] Ali to vrgel napako, ali pa, da je - da bi vrgel napako?
No torej ni prišlo. Ko prideš do zbirnega ravni, posebno bit
nekje stoji, da je rekel, da je preliv, ampak v C se nekako sploh ne ukvarjajo s tem.
Vi dejansko ne morejo delati z njim, razen če uporabite posebna navodila za sestavljanje, pri C.
Razmislimo o zamenjavi XOR.
In mislim, da je članek Wikipedia bi bili tudi pravi, da -
Tako je tudi pripeljal modularne aritmetike, zato mislim, da sem bil v teoriji tem modularne aritmetike
Ko sem rekel, da 0-1 je 15 še enkrat.
Tako, da bi lahko dejansko - na redni procesor, ki počne 0-1 = 15.
Ker smo na koncu na 0, odštejemo 1, tako da potem to ovije okoli 1111 nazaj.
Torej bi to algoritem dejansko delajo, je a + b, je a - b, b -, da bi bilo v redu.
Vendar pa obstaja nekaj predelovalcev, ki ne naredi, da zato ne bi bilo v redu, v teh posebnih narave.
XOR swap deluje v vseh procesorjih. Ok.
Ideja je, da je moral biti enak, čeprav.
Če smo z uporabo XOR nekako dobiti informacije tako v 1 spremenljivk,
in ga nato izvlecite informacije o posameznih spremenljivk znova.
Torej, ali ima kdo ideje / odgovor?
[Student odgovor, nerazumljiv]
Torej bi to delovalo, pa tudi, XOR je komutativna.
Ne glede na to, da so ti, ki 2 številki zgodi, da tu gor,
Ta rezultat bo enak.
Tako ^ ^ b je b.
Morda boste prav tako videli to zapišemo kot ^ = b, b ^ =, ^ = b znova.
Torej, to je v redu, in razumeti, zakaj to deluje, mislim bitov.
Uporaba drobna številko, recimo 11001 in 01100.
Torej, to je "a", to je b.
Tako ^ = b.
Bomo lahko o "A" = na ekskluzivni teh 2 stvari.
Torej 1 ^ 0 je 1, 1 ^ 1 je 0, 0 ^ 1 je 1, in 0 ^ 0 je 0, 1 ^ 0 je 1.
Torej ',' če pogledaš na decimalno številko, da se bo -
ne boste videti veliko razmerje med prvotno "A" in "novem"
ampak gledamo na koščke, "" je zdaj kot mrežo podatkov
tako izvirnega "a" in prvotne b.
Torej, če vzamemo b ^ vidimo, da bomo na koncu na original '. "
In če vzamemo original "'^ novo", "bomo videli bomo končali v prvotni b.
Torej, (b ^) ^ b = izvirnik "."
In (b ^) ^ = prvotna b.
Tu je - še en način gledanja je to kaj LOL sam je vedno 0.
Torej, 1101 ^ 1101, vse bitov se bodo enaki.
Torej se ne bo nikoli, kadar je 1 0, drugi pa 1.
Torej, to je 0000.
Enako s tem. (^ B) ^ b je kot ^ (b ^ b).
(B ^ b) se bo 0, 0 ^ je le, da bo treba "," saj so vsi deli so 0.
Torej, edini, ki se bodo, če "" je bila prvotno 1 - imel narave.
In ista ideja tukaj, sem prepričan, da je tudi komutativna.
Ja. Nisem rekel, da je bilo pred komutativna.
The ^ "," in to je asociativna, tako da zdaj (b ^) ^.
In lahko naredimo b ^ (^).
In tako spet dobimo prvotno b.
Torej, "" Zdaj je kombinacija A 'in B skupaj.
Z našo novo combo "" rečemo, b = combo "'^ prvotna b, smo dobili original'."
In zdaj combo = "'^ nov b, ki je bil original - ali se je zdaj, kaj je" a "ali b.
To je v tem primeru tukaj. To je = b, stara b.
Torej, zdaj je vse spet v zamenjali vrstnem redu.
Če smo dejansko pogledal bitov, b = b ^, se dogaja, da te XOR 2,
in odgovor se bo to in potem = ^ b je XORing te 2 in odgovor je to.
Vprašanja? Ok. Torej, zadnja je nekoliko bistveno težje.
[Študent] Mislim, da je vprašanje o tem. >> Oh, oprostite.
[Študent] Kaj je pravzaprav hitreje? Če uporabljate to XOR, ali je to, če ugotovi novo spremenljivko?
Torej, kaj je dejansko hitreje, razglasi novo spremenljivko ali z uporabo XOR, da bi zamenjali?
Odgovor je, po vsej verjetnosti začasno spremenljivko.
In to je zato, ker ko je bilo zbrati navzdol - tako na skupščini ravni,
ni taka stvar kot lokalne spremenljivke ali kakršnih koli začasnih spremenljivk ali kateri koli od teh stvari.
Ti si kot - tam je spomin, in so registri.
Registri so tam, kjer se stvari aktivno dogaja.
Saj ne dodamo 2 stvari v spomin, dodate 2 stvari v registrih.
In ti bi stvari iz pomnilnika na registrov, nato dodamo,
in potem bi si jih dal nazaj v spomin, ampak se vse dogaja se dogaja v registrih.
Torej, če ste z začasnim spremenljivo pristop, ponavadi kaj se zgodi,
Te številke 2, so že v registrih.
In potem od te točke naprej, ko ste jih zamenjali,
pa bom začela z drugo evidenco.
Kamorkoli je uporabljal b, bo to samo uporabo registra, ki je bil že shranjuje podatke "."
Torej ni treba storiti ničesar, da bi dejansko opraviti zamenjave. Ja?
[Študent] Vendar je prav tako več pomnilnika, kajne?
To bo le več prostora v pomnilniku, če je potrebno shraniti, da se začasno spremenljivko.
Všeč mi je, če pozneje uporabite to začasno spremenljivko spet nekam,
potem pa - ali si določite nekaj za te začasne spremenljivke.
Torej, če na kateri koli točki v času "," b v temp imajo različne vrednosti ali kaj podobnega,
potem se dogaja, da imajo različne lokacije v spominu, vendar je res, da
obstaja veliko lokalnih spremenljivk, ki bo na voljo le v registrih.
V tem primeru, je ni nikoli dal v spomin, zato si ne izgubljamo spomin.
Ok. Zadnje vprašanje je malo več.
Torej, tukaj, v tem CS50 aparata, ki je ni v slovarju.
In razlog za to je, ker [? B66] je črkovalnik, kjer boste lahko pisno
uporabo hash tabele ali poskusov ali nekaterih podatkov strukturo.
Ti boš moral pisati tudi črkovalnik, in boste uporabljali to zbirko za to.
Toda za ta problem, smo se le, da bo pogledati da vidim, če ena beseda v slovarju.
Torej, namesto da shranite celotno zbirko podatkov, v nekaterih strukturi
in potem videti čez celoten dokument, da vidim, če je kaj narobe napisane,
smo samo želim, da bi našli 1 besedo. Tako smo lahko samo skandirati skozi celotno zbirko
in če je ne bomo nikoli našli besedo v celotnem slovarju, potem ne bi bilo tam.
Če smo optično branje po celotnem slovarju in ga videli besedo, potem pa sva dobra, smo ga našli.
Tukaj piše, da si želimo, da začnete iskati na funkcijo file-C je ravnanje,
saj želimo, da se glasi slovar,
ampak bom dal namig tukaj, za katere funkcije, ki jih je treba zamislite.
Jaz jih bom napisal na prostorov.
Tako bo glavni tiste, ki jih želite videti na f se odprejo in potem neizogibno, f zaprta,
, ki bo šel na koncu svojega programa, in f skeniranje f.
Lahko uporabite tudi f brati, vendar pa verjetno ne želite, da
ker je - ne boste na koncu potrebovali.
F skeniranje f je tisto, kar boste uporabljali za skeniranje v slovar.
In tako se vam ni potrebno za kodiranje do rešitev, samo poskusite in tako kot psevdo-kodo svojo pot
do rešitve, in potem bomo o tem razpravljali.
In dejansko, ker sem že dal si ti, če greš v katerem koli terminalu ali vašega aparata lupini,
Jaz bi - sem ponavadi - če še niste videli še, ne vem, če si v razredu,
ampak človek, tako da so strani man, so zelo koristne za ogleduje precej koli funkcijo.
Tako sem lahko naredil, recimo, MAN F, skeniranja f.
To je zdaj info o družini f skeniranja funkcij.
Jaz bi tudi naredil MAN F, odprte in da bomo mi podrobnosti o tem.
Torej, če veste, kaj funkcije, ki jo uporabljate, ali berete kodo
in boste videli nekaj nalog in si kot: "Kaj je to storil?"
Samo človek, ki delujejo ime.
Obstaja nekaj čudnih primerov, kjer boste morda morali reči
všeč. Man 2, ki delujejo ime ali man 3, ki delujejo ime,
ampak imate samo to, da če človek ime funkcije ne zgodi, da dela prvič.
[Študent] Torej sem bral, stran man za odprt, vendar sem še vedno zmeden o tem, kako bo uporabljala in program.
Ok. Veliko priročnikov manj kot v pomoč.
Oni so bolj koristno, če veste, kaj storiti
in potem si morate zapomniti vrstni red argumentov ali kaj podobnega.
Ali lahko dam splošen pregled, vendar so nekateri od njih so zelo prepričljivi.
Kot skeniranja f f, prav tako. To vam daje informacije o vseh teh funkcij,
in 1 linijo tukaj dogaja reči, "F skeniranje f bere iz niza točko ali potoka."
Ampak f odpreti. Torej, kako bi jih uporabljamo f odprta?
Ideja o programu, ki ga potrebuje za to sliko I / O je, da
morate najprej odpreti datoteko, ki jo želite delati stvari, s in neizogibno
prebrati stvari iz te datoteke in ne stvari z njimi.
F odprto je tisto, kar bomo uporabili za odpiranje datoteke.
Kar smo dobili nazaj, kaj datoteka ne želimo odpreti, da nam -
tukaj piše "/ uporabnik / share / narek / besede."
To je datoteka, ki želimo odpreti, in želimo, da bi jo odprli -
moramo jasno določiti, ali želimo odpreti, da boste videli, ali če želimo odpreti za pisanje.
Tukaj je nekaj kombinacij in podobno, vendar želimo odpreti to za branje.
Želimo, da se glasi iz spisa.
Torej, kaj je to vrnitev? Vrne datoteke zvezdico (*),
in jaz sem pokazal vse, kar je v spremenljivko f, tako *,
še enkrat, to je kazalec, vendar ne želimo, da se ukvarjajo s kazalci.
Si lahko zamislite, kot f, f je sedaj spremenljivo boste uporabili za zastopanje datoteko.
Torej, če želite prebrati iz datoteke, lahko bere od f.
Če želite zapreti datoteko, zaprite f.
Tako ob koncu programa, ko smo neizogibno želite zapreti datoteko, kaj naj storimo?
Želimo zapreti f.
Torej, zdaj je zadnja datoteka funkcijo, bomo želite uporabljati optično branje f, f skeniranje f.
In kaj to naredi, je, da skenira v spisu, ki išče vzorec za tekmo.
Če pogledamo na stran človeka tukaj, bomo videli int F F skeniranja, prezreti vrnjeno vrednost za zdaj.
Prvi argument je datoteka * tok, tako da je prvi argument bomo želeli prenesti, je f.
Mi skeniranje več kot f.
Drugi argument je format string.
Dal vam bom oblikovnega niza zdaj.
Mislim, da se zgodi, da recimo, 127s \ n, veliko je to nepotrebno.
Ideja o tem, kaj da je oblikovni niz je lahko si misliš, f skeniranja kot nasprotje f tiskanja.
Torej f tisk, tisk f uporabljamo tudi to vrsto parametra format,
ampak v f tiskanja, kaj delamo, je - poglejmo enakovredno.
Torej tiskanje f, in tam je pravzaprav tudi f natisni f, kjer je prvi argument se bo f.
Ko tiskate f, bi lahko rekli nekaj podobnega, "print 127s \ n" in potem, če se peljemo mu nekaj vrvice,
da se bo natisniti niz in nato v novo vrstico.
Kaj pomeni 127, sem prepričan, vendar nikoli nisem sam omejen na to,
Vi sploh ne bi morali reči, 127 'v tiskani f,
ampak kaj to pomeni izpiši prvih 127 znakov.
Zato sem prepričan, da je tako. Lahko Google za to.
Toda v naslednjem sem skoraj pozitivno, to pomeni, da je.
Torej, to je izpiši prvih 127 znakov, nato pa se v novo vrstico.
F f skeniranje zdaj, namesto da gledaš spremenljivke in tiskanje,
to se dogaja, da pogled na nekatere nizu, in shranite vzorec v spremenljivke.
Naj dejansko uporabo optičnega f v drugem primeru.
Torej, recimo, da smo imeli nekaj int x = 4,
in smo želeli ustvariti niz narejen iz - želela ustvariti niz
da je bila všeč, bo ta prišel veliko kasneje,
nekaj, kar je podobno kot 4.jpg.
Torej je to lahko program, kjer boste imeli kilometrov števec,
Skratka i preprečevanje in želite shraniti kup slik.
Torej želite shraniti i.jpg, kjer sem je nekaj ponovitev vaš zanke.
Torej, kako bi to niz za ta JPEG?
Če ste želeli natisniti 4.jpg, bi lahko samo rečem tiskanja F, d.jpg%,
nato pa jo natisne za to JPEG.
Toda če želimo rešiti niz 4.jpg, bomo uporabili optično f.
Torej niz s - pravzaprav smo moreš - znak, znak je, pojdiva 100.
Zato sem nekaj prijavljeni niz 100 znakov
in to je tisto, kar smo neizbežno, da se shrani, da se noter JPEG
Torej bomo uporabljati optično f, ter obliko, kako bi lahko rekli% d.jpg
za tiskanje 4.jpg v obliki, to se bo d.jpg%.
Torej format% d.jpg, kaj želimo nadomestiti z% d je x,
in zdaj moramo hraniti, da se niz nekje.
In kje bomo za shranjevanje tega niza je matrika s.
Torej po tej liniji kodo, s, če tiskamo f,% s variabilnega s,
da se bo tiskanje 4.jpg.
Torej f skeniranje f je enak kot skeniranja f, razen zdaj je videti v tem spisu
za tisto, za shranjevanje vs.
To je tisto, kar je zadnji argument bo.
Želimo, da za shranjevanje - "Scan f družino funkcij skandiranje tako po obliki kot poskusil spodaj.
Če se kateri je shranjena v lokacijskih točk lahko vrnete - "
Ne bi mi bilo dobro. Naj pomislim za sekundo.
Torej, skeniranje f ne - kaj za vraga je funkcija, ki pa to?
Torej, skeniranje f se ne bo trajalo celo število in ne pika JPG.
To se dogaja, zamrmra [].
Prihranite int spremenljivko niza int C.
Kaj je ta spremenljivka, ali kaj je ta funkcija imenuje?
Da. That - ja. Torej, kaj sem vam pred opredelitev je bila s print f,
ki je - da naredi veliko bolj smiselno, zato sem rekel, da je veliko več kot f tiskanja.
Scan f je še nekako kot f tiska, vendar je tiskanje f bo skeniranje več
in zamenjavo spremenljivke in zdaj ga shranite v nizu.
Namesto da bi ga natisnili, jo shrani v nizu.
Torej prezreti, da je v celoti. Še vedno lahko pomislite določa obliko, kot tako kot pri f tiskanja.
Zdaj, če želimo narediti 4.jpg stvar, bi naredili S tiskanja f, x za to.
Torej, kaj skeniranje f počne - kaj je vaše vprašanje bo?
[Študent] Jaz sem samo zmeden o tem, kaj poskušamo storiti prav tukaj
s tem JPEG. Ali lahko pojasnite, da je 1 več časa?
Torej je to - to je manj relevantna za skeniranje f f sedaj, upajmo, da bo to kravato nazaj v neke vrste način.
Ampak, kaj sem prvotno nameraval pokazati bilo - to je pravzaprav neposredno povezane s temi [? F5]
Vi boste uporabljali S tiskanja f, kjer pravijo, da imamo 100 slik,
in želite prebrati sliko 1.jpg 2.jpg,, 3.jpg.
Torej, da bi to storili, morate f odprta, nato pa moraš opraviti v nizu, ki ga želite odpreti.
Zato bi želeli odpreti 1.jpg, da bi ustvarili niz, ki je 1.jpg,
delamo s print f% od d.jpg--nismo naredili za int i = 0.
i <40, i + +.
Tako je tisk f% d.jpg na i.
Torej po tej progi, zdaj spremenljivka ali polje s bo 1.jpg.
Ali 0.jpg, 1.jpg, 2.jpg. In tako bomo lahko odprli v zameno za vsako sliko za branje.
Tako da je tisto, kar je natisniti f ne. Vidiš, kaj je tiskanje f počne sedaj?
[Študent] Ok, to je ob - ustvari niz, something.jpg in jo shrani.
Da. To ustvarja - to je še en format string, tako kot f skeniranje in tiskanje f,
če jih vnese vse spremenljivke v drugega argumenta, bi bilo v nasprotju s i.
Morda - mislim, da je tako. Toda ne glede na vrstni red argumentov.
To se dogaja, da vstavite vse spremenljivke v obliki niza
in nato shranite v našo buffer, pravimo, da buffer, to je, če smo shranjevanju niz.
Tako smo shranjevanje v notranjosti S. pravilno v formatu niz, saj je bilo% d se nadomesti z 4.
[Študent] Torej, če je to storil, je spremenljivka f le, da bo treba prerazporediti?
Da. Torej bi morali zapreti izvirnik f pred tem.
Toda - in nato tudi, če ni bilo f odprla tukaj, potem bi morali reči -
Ja. Vendar pa bi bilo odpreti 100 različnih datotek.
[Študent] Ampak mi ne bi mogli dostopati ali - v redu.
Ok. Torej, skeniranje f, f skeniranje f, je nekako isto idejo,
toda namesto, namesto da bi jo shranite v nizu, to je več, kot si ti sedaj
gre skozi želo in vzorec ujemanja zoper to vrvico in shranjevanje rezultate v spremenljivke.
Lahko uporabite optično f razčleniti v nekaj podobnega 4.jpg in shranite celo število 4 x vsoto v int.
To je tisto, kar lahko uporabite za optično f.
F f skeniranje bo naredil, da v ukazni vrstici.
Pravzaprav sem prepričan, to je tisto, knjižnica CS50 ne.
Torej, ko ste rekli, "dobili int," je skeniranje f-ing več - scan f je način dobiš vnos uporabnika.
F f skeniranje bo naredil isto stvar, vendar z uporabo datotek za skeniranje končano.
Torej, tukaj smo skeniranje v tej zadevi.
Vzorec smo se trudili nekaj niz, ki je 127 znakov
sledilo novo vrstico
Zato sem prepričan, da bi lahko celo rekel "S tekmo," ker v slovarju
se zgodi, da imajo, smo zagotoviti nobena beseda ni tako dolgo,
in bo tudi skeniranje f f, mislim, ustavimo se na novo progo ni važno kaj.
Ampak bomo tudi novo linijo na tekmi, in -
[Študent] Če nismo vključili novo linijo, ne bi našli dele besedo?
Zato - vsak - si ogleduje slovar -
Tako v slovarju, so vse naše besede.
Vsak je na novi progi.
F skeniranja se bo pobral to besedo.
Če nam ne vključujejo novo vrstico, potem je možno, da bo naslednji f skeniranje pravkar prebrali novo vrstico.
Toda tudi novo linijo potem bo šele prezreti novo vrstico.
Ampak nikoli ne bomo dobili del besede, ker smo vedno bere do nove proge, ni važno kaj.
[Študent] Kaj pa, če iščete besedo "Cisse," kot Cisse.
Bo to, da najdejo, in pravijo, da je tekma?
Torej, tukaj smo - bo brati - to je pravzaprav dobra točka.
Mi nikoli ne uporablja trenutno - je beseda, ki jo iščeš, je prvi argument v ukazni vrstici.
Torej niz, beseda = argv 1.
Torej, niz, ki ga iščemo, je argv 1.
Nismo iskali besedo na vse v naši skeniranja f.
Kaj bomo počeli s pregledovalnikom f postaja vsako besedo v slovarju,
in potem, ko smo to besedo gremo uporabiti strcmp jih primerjati.
Bomo primerjali našo besedo in tisto, kar smo pravkar prebral noter
Tako neizogibno, da bomo na koncu delaš kup skeniranja fs
dokler se prav tako se zgodi, da bo skeniranje f vrniti -
se bo vrnil 1, dokler se ujema novo besedo,
in se bo vrnil nekaj drugega, takoj ko je zaostala za besedo.
Beremo v celotnem slovarju, hranjenje po vrsticah vsaka beseda v spremenljivke s.
Nato smo primerjali z besedo sekund, in če primerjava == 0,
strcmp se zgodi, da bi bil dosežen, če 0 tekma.
Torej, če je bilo 0, potem lahko natisnete f, usklajena,
ali beseda v slovarju, ali karkoli želite natisniti f.
In potem - ne želimo, da f zapreti, znova in znova.
To je tisto kar želimo narediti, in mi smo ne samo išče besedo v slovarju.
Tako smo lahko storili, če bi želeli, da si za svojega vzorca, Cisse, kot si že rekel,
če želimo, da si za to vzorcu, potem ne bi bilo v primeru
ker je to dejansko ni beseda, ampak ena od besed iz slovarja, ki se zgodi, da imajo v njem.
Zato bi bilo ujema to besedo, vendar to podmnožica besede ni sama beseda.
Ampak to ni, kako jo uporabljate, smo berete v vsaki besedi
in potem primerjali besedo, ki jo imamo s to besedo.
Torej smo vedno primerjali polni besed.
Lahko pošljemo zaključenih rešitev kasneje.
To je nekako skoraj pravilen odgovor, se mi zdi.
[Student komentar, nerazumljiv]
Oh, sem se znebiti prej? Char je, mislim, da je rekel 127 - Pozabil sem, kaj je največji.
Bomo pač 128, sedaj je dovolj dolg.
Mi ni treba natisniti ničesar.
Mi smo tudi želeli bodo morali zapreti svojo datoteko, in da bi morala biti približno pravilen odgovor.
CS50.TV