[Powered by Google Translate] Sehemu ya tatizo Kuweka 2: Haka Edition
Rob Bowden, Chuo Kikuu cha Harvard
Hii ni CS50. CS50.TV
Kwa hiyo, mimi nina Rob. Mimi nina mwandamizi katika Kirkland. Huu ni mwaka wa tatu yangu TFing CS50.
Ni mara ya kwanza kwamba sisi ni kubadilisha kutoka sehemu jadi-hotuba-style,
ambapo sisi tu aina ya mapitio kile kilichotokea katika hotuba na kisha guys kuuliza maswali,
sasa kwa kuwa mengi zaidi tatizo-msingi, ambapo sisi kutumia Spaces, na -
Oh, hivyo wazo ni kwenda zilizounganishwa nilipowatuma na kisha wewe utakuwa katika nafasi yangu.
Je, mtu yeyote kuwa mbali? Sawa.
Hivyo sisi ni kwenda kuwa na kutumia hii, na sisi ni kwenda kufanya matatizo kuishi katika sehemu
na kujadili nao na kuhesabia nje nini makosa
na mimi ili kuvuta up baadhi ya code yako, na mimi ili kujadili mawazo yako.
Hivyo ina mtu alikuwa na shida?
Unaweza kuzungumza upande; mimi sijui kama tutaweza kuwa na sababu kwa ajili hiyo.
Sasa, kama supersection uliopita, kama walikuwa katika darasa kwamba, unajua nini hiyo ni juu.
Juu ya yote ya seti P kuna kwenda kuwa hizi sehemu.
Hivyo P-set 2, specifikationer, Nadhani kuona jambo P-set 1 tayari.
Lakini tunaweza kuangalia P-set 2 kwa nini tuko kwenda kwenda juu ya leo.
Na utaona sehemu ya maswali.
Hivyo hii itakuwa katika yote ya P-seti; kutakuwa sehemu ya maswali.
Hadi sasa tumekuwa alisema, "Fikiria fursa hii ya kufanya mazoezi."
Huwezi kuwa na kuulizwa kuwasilisha mpango huu.
Wazo ni kwamba hawa wanatakiwa aina ya kusaidia kupata kuanza kwa kuweka tatizo.
Nadhani katika toleo Hacker, mengi yao wanatakiwa tu kuwa mpya, ya kuvutia mambo ya kujifunza.
Wanaweza kuwa na moja kwa moja husika na kuweka tatizo.
Na hivi sasa sisi siyo kuwa wewe kuwasilisha yao, lakini katika nadharia,
kwa seti baadaye tatizo, unaweza kuwasilisha yao, na hivyo unaweza ama kuja sehemu
au kutazama sehemu ya kupata majibu, au unaweza tu kupata yao juu yako mwenyewe
kama huna wanaona kama kufurahia uwepo wangu.
Hivyo - Nadhani hii ni moja ya kwanza.
Oh. Pia, chini ya sehemu hizi za maswali sisi pia kuuliza maswali kuhusu kaptula.
Basi, mimi nadhani, katika nadharia, wewe wanatakiwa kuangalia hizi kabla ya kuja kwa sehemu,
lakini ni faini kama huna, tutaweza kwenda juu yao anyway.
Basi, tunaweza kuanza na haya: "Jinsi gani kitanzi wakati tofauti na kitanzi do-wakati?
Wakati ni muhimu hasa mwisho? "
Hivyo mtu yeyote kuwa yoyote -?
[Mwanafunzi] do-wakati kitanzi daima nitafanya angalau mara moja.
Ndiyo. Hivyo kwamba ni tofauti. kitanzi wakati - I'll tu kufanya hivyo hapa - wakati kitanzi, tuna hali
haki hapa, ambapo do-wakati, huna hali mpaka sisi kupata chini hapa.
Na hivyo, wakati mpango wako s utekelezaji, na anapata kwa kitanzi wakati,
mara moja hundi kama hali hii ni kweli.
Kama hali hiyo siyo kweli, itakuwa tu ruka juu ya kitanzi kabisa.
Do-wakati kitanzi, kama mpango wa utekelezaji, anapata na "kufanya."
Hakuna kinachotokea katika hatua hii, tu inaendelea utekelezaji.
Kisha wakati hits "wakati," kama hali ni ya kweli, hivyo itabidi kitanzi nyuma na kufanya hivyo tena
na tena na tena mpaka hali si kweli na kisha tu falls kupitia.
Hivyo, tofauti kuwa, kwamba huu unaweza ruka haki, tangu mwanzo sana.
Hii lazima executes mara moja na kisha inaweza kutekeleza mara zaidi kama hali bado ni kweli.
Hivyo kitanzi wakati tu kufanya hivyo mara moja, au - wakati kitanzi - sisi wanaweza haja ya kufanya hivyo wakati wote,
tangu haraka kama sisi kupata hiyo, kama hali ni uongo, tutaweza tu ruka haki juu yake.
Wakati kufanya-wakati kitanzi, sisi nitafanya hivyo mara moja, lazima.
Kisha, wakati sisi kupata hali, sisi kuangalia kama ni kweli au uongo.
Kama ni kweli, tutaweza kufanya hivyo tena; kama ni uongo, tutaweza tu kuendelea kwenda.
Hivyo wakati ni muhimu hasa masika?
Hivyo naweza kusema kwamba katika ukamilifu wa miaka 4, miaka 3, chochote,
kwamba nimekuwa programu, mimi sikutumia hii, kama, chini ya mara 10.
Na pengine 5 kati yao ni katika CS50 wakati sisi ni kuanzisha matanzi kufanya-wakati.
Hivyo wakati wewe kutumika kufanya-wakati matanzi?
Wakati ni - yeah?
[Mwanafunzi] Wakati wewe ni kujaribu kupata pembejeo user, au kitu unataka kuangalia -
Yeah. Hivyo kufanya-wakati tanzi, mtumiaji pembejeo ni moja kubwa.
Hiyo ndiyo siku ya kwanza ya wanandoa tatizo seti, wakati unataka kuuliza user, kama,
"Nipe kamba," huwezi kuendelea mpaka kupata ile kamba.
Na hivyo, lazima, haja ya kuuliza kwa kamba angalau mara moja.
Lakini basi kama wao kujibu kitu mbaya, basi unahitaji kitanzi nyuma na kuuliza tena.
Lakini zaidi ya pembejeo user, ni nadra sana kwamba mimi kukutana kesi
ambapo nataka kitanzi "angalau mara moja" lakini pengine zaidi.
Maswali au -? Kuna mtu yeyote kutumika kufanya-wakati kitanzi popote mwingine?
Sawa. Hivyo moja ya pili ni, "Je, Undeclared kitambulisho
kawaida zinaonyesha kama outputted na Clang? "
Hivyo ni aina gani ya maadili inaweza mimi kuandika kupata 'kitambulisho Undeclared?'
[Mwanafunzi] Hayo x = 2?
Hivyo tunaweza tu kujaribu katika hapa, x = 2.
Tutaweza kukimbia hii - oh, sikuweza bonyeza yake. Hivyo hapa sisi kupata - wote haki.
"Matumizi ya x Undeclared kitambulisho."
Basi hiyo ni kitambulisho Undeclared, hazibadiliki.
Itakuwa mara nyingi kuwaita variable kitambulisho.
Hivyo nisifahamu ni kweli variable, haina kujua ni nini.
Hivyo ni kitambulisho.
Hivyo ni kwa nini Undeclared? Yeah.
Hivyo kwa kuwa wazi juu ya istilahi, tamko la variable
ni wakati wewe kusema "x int," au "string y," lolote.
initialization ya kutofautiana, au zoezi la kutofautiana,
ni wakati wewe kusema "x = 2."
Hivyo tunaweza kufanya haya katika hatua tofauti, int x, x = 2, na mpaka - tunaweza kuwa na rundo la stuff katika hapa -
lakini mpaka mstari huu hutokea, x bado uninitialized, lakini imekuwa alitangaza.
Na hivyo tunaweza kufanya hivyo ni wazi katika mstari 1, na sasa tunatangaza na initializing.
Maswali?
Na hatimaye, "Kwa nini ni Cipher Kaisari si salama sana?"
Hivyo kwanza, haina mtu yeyote unataka kusema nini Cipher Kaisari ni?
[Mwanafunzi] Kaisari Cipher tu ni kwamba wewe ramani, wewe kuhama kila herufi,
idadi fulani ya barua kwenda juu, na hoja juu ya nyuma, na ni si salama sana kwa sababu
kuna tu 26 chaguzi inawezekana na wewe tu na kujaribu kila 1 ya wale mpaka kupata.
Oh. Hivyo, mimi lazima kurudia?
Cipher Kaisari, it's - I mean, wewe utakuwa ni kushughulika na juu ya matatizo ambayo wewe -
au mimi nadhani toleo la kawaida ya kuweka tatizo si kwamba katika toleo hacker.
Kadhalika toleo la kawaida kwa kuweka tatizo, wewe kupata ujumbe kama "dunia Hello,,"
na wewe pia kuwa na idadi kama 6, na wewe kuchukua kwamba ujumbe, na kila tabia ya mtu binafsi,
wewe ni mzunguko na nyadhifa 6 katika alfabeti.
Hivyo 'h' katika hujambo bila kuwa h-i-j-k-l-m-n.
Hivyo barua ya kwanza itakuwa n. Sisi kufanya kitu kimoja na e.
Kama tuna, kama, z au kitu, basi sisi wrap nyuma karibu na '.'
Lakini tabia ya kila anapata waliendesha 6 wahusika baadaye katika alfabeti, na si salama sana
tangu kuna uwezekano tu 26 kwa jinsi njia nyingi unaweza wrap barua moja.
Hivyo unaweza tu kujaribu yote 26 ya kwao na, pengine, kwa ujumbe mrefu wa kutosha,
tu 1 ya mambo hayo kutokea 26 ni kwenda kuwa legible,
na moja legible ni kwenda kuwa ujumbe halisi.
Hivyo si njia nzuri sana ya encrypting chochote wakati wote.
Lisilohusiana na kaptula hizo, "Ni nini kazi?"
Hivyo kile ni kazi? Ndiyo.
[Mwanafunzi] Ni kama kipande tofauti ya kificho kwamba unaweza kupiga kupitia na kisha kupata thamani ya kurudi kwa chochote.
Yeah. Hivyo mimi itabidi kujibu ni kwa kujibu pia ijayo - au kurudia na pia tu kujibu moja ijayo.
Unaweza kutumia kazi badala ya kuiga na pasting code juu na juu tena.
Tu kuchukua kwamba code, kuiweka katika fuction, na kisha unaweza kuwaita tu kazi
popote umekuwa kuiga na pasting.
Hivyo kazi ni muhimu.
Hivyo sasa tutaweza kufanya matatizo halisi.
moja ya kwanza. Hivyo wazo la kwanza ni, wewe kupita kamba, na bila kujali -
au gani kusema yote lowercase? Haisemi wote lowercase.
Hivyo ujumbe inaweza kuwa kitu chochote, na - oh no. Ni gani.
"Kwa unyenyekevu, unaweza kudhani kwamba mtumiaji mapenzi tu pembejeo barua lowercase na mazingira."
Hivyo sisi kupita ujumbe na barua tu lowercase na kisha sisi Alternate
kati ya mji mkuu na ndogo - sisi mabadiliko string kuwa mji mkuu na ndogo, alternating.
Hivyo kabla ya sisi kukupa pili hata kupiga mbizi katika tatizo,
nini ni jambo la kwanza kwamba tunahitaji kufanya nini?
Oh, nini mimi bonyeza tu juu? Oh, mimi tu clicked kwenye email katika hapa.
Hivyo kitu ya kwanza tunahitaji kufanya - mimi kuangalia moja sahihi?
Je, hii ni sehemu ya huu?
Hapana, wale bado huko, ingawa.
Okay, bado hapa.
Sasa hatuwezi kudhani -? Ndiyo. Hapa hatuwezi kudhani kwamba ni tu lowercase na mazingira.
Hivyo sasa inabidi kushughulika na ukweli kwamba barua inaweza kuwa chochote sisi unataka yao kuwa.
Na hivyo jambo la kwanza tunataka kufanya ni kupata tu ujumbe.
Sisi tu wanahitaji kupata kamba, kamba s = GetString, okay.
Sasa tatizo hili, kuna wanandoa wa njia za kufanya hivyo.
Lakini sisi ni kwenda wanataka kutumia waendeshaji bitwise hapa.
Je, kuna watu ambao ama walikuwa si katika supersection,
au kitu, na hawajui nini bitwise operators ni?
Au jinsi wanavyohusiana na ASCII katika njia yoyote?
[Mwanafunzi] Mimi si wakati supersection, lakini Mimi najua kile bitwise operators ni.
Sawa. Hivyo basi mimi si kwenda juu ya misingi ya yao, lakini mimi itabidi kueleza
nini tunakwenda wanataka kutumia hapa.
Hivyo '': binary uwakilishi wa mji mkuu, idadi ni 65.
Mimi tu kwenda kuangalia - 41 ni kwenda kuwa 01,000,001.
Hivyo kwamba wanapaswa kuwa 65 katika decimal; hivyo hii ni ya uwakilishi binary ya mji mkuu wa tabia A.
Sasa, uwakilishi binary ya tabia Herufi za chini ''
ni kwenda kuwa kitu kimoja, karibu. Ni kwamba - 6, yeah. Hii ni haki.
Hivyo binary mji mkuu, binary lowercase '.'
Hivyo taarifa kwamba tofauti kati na '' ni hii kidogo moja.
Na hii hufanyika kuwa ni kidogo 32, kidogo anayewakilisha idadi 32.
Na kwamba inafanya hisia tangu ni 65; '' ni 97.
Tofauti kati yao ni 32.
Hivyo sasa tunajua tunaweza kubadili kutoka kwa '' kwa kuchukua
na bitwise ORing, pamoja na - kwamba inaonekana kama 1.
Hii ni bitwise AU, na 00100000, na kwamba kutakuwa na kutupa '.'
Na tunaweza kupata kutoka 'A' na kwa bitwise ANDing
na 11, 0 katika nafasi hiyo, 11,111.
Hivyo hii itakuwa kisha kutupa nini hasa '' ilikuwa; lakini kufuta nje hii kidogo ya mtu binafsi,
hivyo tutaweza kuwa na 01000001, mimi sijui kama mimi kuhesabiwa haki.
Lakini mbinu hii ya bitwise ORing kupata kutoka mji mkuu wa Herufi za chini,
na bitwise ANDing kupata kutoka lowercase kwa mkuu ni si ya kipekee ya A.
Yote ya barua, K vs k, Z vs z,
wote ni kwenda tu kidogo tofauti na hii moja.
Na hivyo unaweza kutumia hii kubadili kutoka barua yoyote lowercase kwa barua yoyote mtaji na kinyume chake.
Sawa. Hivyo njia rahisi ya kupata kutoka hilo - hivyo badala ya kuwa na
kuandika chochote 1011111 ni - njia rahisi ya anayewakilisha idadi hii, na hii si moja
kwamba mimi akaenda juu katika supersection, lakini tilde (~) ni mwingine operator bitwise.
Nini ~ gani ni inaonekana katika uwakilishi kidogo.
Hebu kuchukua idadi yoyote.
Hii ni baadhi tu ya idadi binary, na kile ~ haina ni kama tu flips wote wa bits.
Hivyo hii ilikuwa 1, sasa 0, hii ni 0, sasa 1, 010,100.
Basi hiyo ni ~ wote gani. Hivyo 32 ni kwenda kuwa idadi - kujikwamua kwamba -
hivyo 32 ni kwenda kuwa idadi 00,100,000, na hivyo ~ ya hii ni kwenda kuwa
idadi hii hapa kwamba mimi ANDed '' kwa.
Je, kila mtu kuona kwamba? Hii ni pretty kawaida, kama wakati unataka kufikiri
kwa ajili ya mambo ya baadaye ili sisi tupate kuwa kuona, wakati tunataka kuona kama -
au tunataka kila kitu, kila moja kidogo kuweka isipokuwa kwa 1
wewe huwa na kufanya ~ ya kidogo kwamba sisi si unataka kuweka.
Hivyo hatutaki 32 kidogo kuweka, hivyo hatuna ~ ya 32.
Sawa. Hivyo tunaweza kutumia wale wote hapa.
Haki wote, hivyo ni faini kama wewe si kosa, tutakuwa polepole kutembea juu ya pamoja,
au kutembea juu ya hili, hivyo - kwa njia hii. Kutembea kwa njia hii.
Hivyo tuna string yetu, na tunataka kitanzi juu ya kila tabia katika string kwamba na kufanya kitu kwa hayo.
Hivyo ni jinsi kufanya sisi kitanzi juu ya kamba? Tufanye kutumia?
Sitakuja kufanya hivyo hapa. Yeah.
Hivyo nina iterator yangu, na yeye alisema, lakini jinsi gani mimi kujua jinsi wengi wahusika ni katika kamba?
Strlen (s), kisha i + +.
Hivyo kile nimepata kufanyika hapa ni si njia bora ya kufanya mambo.
Je, mtu yeyote kujua kwa nini?
Kwa sababu wewe ni kuangalia lugha ya kamba kila wakati.
Hivyo sisi ni kwenda kutaka hoja strlen, mimi naweza kusema hapa juu int urefu = strlen (s),
na kisha gani i <urefu, na katika kesi hawajaona hivyo kabla,
Mimi naweza pia kufanya int i = 0, urefu = strlen (s).
Na hivyo hii ni kiasi fulani vyema, tangu sasa nimekuwa vikwazo wigo
urefu wa kutofautiana tu hii 'kwa' kitanzi, badala ya kutamka hivyo kabla
na kwamba daima lipo, na katika kesi hukutaka kukamata nini hiyo ni mbaya,
au kwa nini awali ilikuwa mbaya, it's - kuanza saa kwa kitanzi.
I checked hali hiyo. Ni i <urefu wa s?
Hivyo urefu wa s, hebu kazi na "hello" wakati wote.
Hivyo urefu wa s, h-e-l-l-o. Urefu ni 5.
Hivyo i = 0, urefu ni 5, hivyo i si <5, hivyo kitanzi inaendelea.
Kisha sisi kwenda tena. Sisi kuangalia hali. Ni i <urefu wa hujambo?
Basi hebu angalia urefu wa hello. H-e-l-l-o. Hiyo ni 5; i si <5, hivyo sisi kuendelea tena.
Hivyo sisi ni kuhesabu, sisi ni kuhesabu hello, kwa kila iteration ya kitanzi,
hata mawazo ni kamwe kwenda na mabadiliko; ni daima itakuwa 5.
Hivyo sisi kumbuka tu 5 hadi mbele, na sasa kila kitu ni bora.
Hivyo iterating zaidi string nzima.
Nini tunataka kufanya kwa kila tabia ya kamba?
[Mwanafunzi akizungumza, unintelligible]
Yeah. Hivyo, kama tabia ni zisizo za kialfabeti, basi sisi nataka tu ruka juu yake.
Kwa sababu sisi tu huduma kuhusu barua alphabetic; hatuwezi capitalize idadi.
Hivyo ni jinsi gani tunaweza kufanya hili? Hivyo hali yetu, hivyo kama tunataka kitu - kuangalia kama ni herufi.
Hivyo ni jinsi gani sisi kuangalia hii?
[Mwanafunzi] Unaweza tu kutumia kazi ni alpha.
Ni kwamba pamoja na katika aidha ya hizi, au ni pamoja na kama, char.h au kitu?
Hebu si kutumia ni alfa na kazi, na kutumia wazi - hivyo tuna s [i],
kwamba ni tabia ya nane ya s, kumbuka kwamba string ni safu ya wahusika,
hivyo tabia ya nane ya s.
Sasa, kama ni barua mji mkuu, tunajua ina kuwa katika mbalimbali maalum.
Na ni nini mbalimbali kwamba?
Yeah. Hivyo kama s [i] ni ≥ 65, na s [i] ni ≤ 90, nifanye nini badala yake?
Yeah. Hivyo unapaswa kabisa kamwe hata haja ya kujua maadili ASCII ya kitu chochote milele.
Kamwe kufikiria idadi 65, 90, 97 na 102, au chochote ni.
Huna haja - 112 -? Huna haja ya kujua wale wakati wote. Hiyo ni vibaya mno.
Tu kutumia herufi moja-quote, moja quote constants. Hivyo '' na chini ya 90 ni 'Z.'
Na hii ni kikubwa zaidi - mimi bila kujua mbali juu ya kichwa yangu kwamba Z ni 90.
Najua mbali juu ya kichwa yangu kwamba 'Z' ni mji mkuu Z.
Hivyo kwa muda mrefu kama hii ni katika aina mbalimbali ya mji mkuu na mji mkuu Z, au tuweze kuangalia kwa lowercase,
Au kama ni katika mbalimbali ≥ 'a' na ≤ z.
Basi hiyo ni hali yetu.
style kwa ambapo kuweka mambo haya hutofautiana.
Nitafanya hivyo kama hii.
Sasa, je, tunataka kufanya?
Tunajua barua hii ni tabia, tabia ya alfabeti.
Hivyo tunahitaji Alternate kati ya kama hii lazima sasa kuwa barua mtaji au barua lowercase.
Jinsi gani sisi kuweka wimbo wa moja ambayo sisi nataka kuwa?
[Mwanafunzi sauti, unintelligible]
Hivyo ndiyo, lakini napenda kuangalia.
Module 0-2 alikuwa alisema, ilikuwa pendekezo kutupwa nje, na nakubaliana na hilo.
Ila taarifa kwamba, kama - ni kesi hii? Yeah.
Ni kila mtu mwingine, lakini hatuwezi moduli 2 ya i, au i Mod 2, tangu
taarifa kwamba E ni mji mkuu na '' ni herufi ndogo? Lakini kuna nafasi kutenganisha yao?
Hivyo ni kwenda kuwa Mod sawa 2, lakini wao ni tofauti kesi.
[Mwanafunzi swali, unintelligible]
Yeah. Hivyo sisi ni kwenda tu kuweka kuhesabu.
Tunaweza pia kufanya hivyo katika hapa kama sisi alitaka; kwamba ili kupata unwieldy kidogo
katika maazimio kwa kitanzi; mimi itabidi kuweka it up hapa.
Hivyo kuhesabu int = kuanza saa 0.
Na hivyo kwa sasa, mimi naenda uhesabu alfabeti wahusika tulikuwa.
Hivyo sisi ni inevitably kwenda kuhesabu + + tangu sisi kupatikana mwingine tabia alfabeti.
Lakini, sasa wewe ni kusema kama kuhesabu Mod 2.
Basi nini kama kuhesabu Mod 2? Oh. Mimi itabidi kufanya == 0 kwa sasa.
Tutaweza pia kwenda juu ya hilo. Hivyo kama kuhesabu Mod 2 == 0, basi ni nini?
[Wanafunzi jibu, unintelligible]
Hivyo tunataka kwa kuishia uppercase.
Kuna kesi 2; kubwa na ndogo ni kesi 2.
Hivyo kama tuko katika lowercase sisi haja ya kufanya hivyo uppercase.
Kama ni uppercase hatuna haja ya kufanya kitu chochote.
Lakini, kuna njia - shouldn't have flipped -
kwamba hatuna hata haja ya kuangalia kama ni uppercase au lowercase?
Tunaweza kufanya nini kwa siku zote kuhakikisha kwamba sisi daima kuishia katika uppercase?
Hivyo taarifa tulichokifanya kwa lowercase ''; nini kama sisi alifanya hivyo sawa exact kitu kwa uppercase?
Je uppercase mabadiliko, au anafanya mabadiliko ya thamani?
Yeah. Hivyo barua yoyote mtaji bitwise ANDed na ~ 32 ni kwenda kuwa huo uppercase tabia
kwa sababu kwa tabia yoyote uppercase kidogo 32 si kuweka.
Hivyo kama tunataka kuleta tabia s [i], sisi nataka iwe lowercase au uppercase.
Hivyo kama ilikuwa lowercase, ni sasa uppercase, kama ilikuwa uppercase, bado uppercase, na hiyo ni yake.
Mimi alisema hii katika supersection: Unaweza kutumia 32 kama unataka, lakini mimi huwa wanapendelea kufanya '' -,
badala ya 32 wazi tu, kwa sababu inaweza kuwa yoyote kidogo nyingine.
Baada ya kidogo 32, inaweza kuwa yoyote ya hizi, au tunataka kuwa kutosha
idadi ya kuwakilisha yote ya wahusika.
Hivyo kama wewe kupata kidogo 32, inaweza kuwa ni kidogo 64, inaweza kuwa ni kidogo 128.
Yoyote ya bits wale inaweza kuwa kidogo kwamba tofauti kati ya kubwa na ndogo.
Mimi lazima haja ya kujua kwamba ni kidogo 32.
Naweza kutumia hii 'a' - kupata kidogo kwamba hutofautiana kati ya mbili
bila wanaohitaji kutegemea idadi uchawi kwamba ni 32.
Na hivyo sasa, mwingine kuhesabu ilikuwa isiyo ya kawaida, na hivyo nini nataka kufanya?
[Mwanafunzi majibu, unintelligible]
[Mwanafunzi] Nini hiyo?
Nitawafanyieni katika pili 1.
Hivyo sasa kama nataka - mimi nataka kuhakikisha tabia ni sasa lowercase,
na hivyo naweza AU na 32, na 32, maana yake '' - A.
Lakini taarifa, kwa hoja hiyo kama moja ya awali, kwamba kama
barua tayari alikuwa lowercase, basi ORing na 32 tu anaendelea kuwa Herufi za chini.
Ni hajabadilika tabia ya awali.
Lakini sasa mimi hawana kuepuka akisema, "Kama ni lowercase, tu kusahau kuhusu hilo,
kama ni uppercase, basi mabadiliko hayo. "
Ni rahisi zaidi kufanya kazi hii.
[Mwanafunzi] Laiti mkakati wa kutoa mapato uppercase kutoka kazi lowercase kama si 32?
Kama ilikuwa, kama, 34 au kitu?
Hivyo, unahitaji kujua kwamba tofauti kati ya 2 ni -? >> 1 kidogo.
Ni inaweza kuwa zaidi ya 1 kidogo, kwa muda mrefu kama aina ya sarafu chini ya msimamo huu ni sawa.
Hivyo tunahitaji angalau herufi 26 - au, kuna 26 wahusika.
Hivyo tunahitaji idadi angalau 26 ili kuwakilisha tofauti -
Tofauti kati na 'ina kuwa angalau 26,
au mwingine tunataka kuwa kuwakilishwa namba zote mtaji.
Hiyo ina maana kwamba, kama tunataka kuanza saa 1, itakuja kutumia yote ya bits hizi,
wote wa bits hizi kwanza 5, kuwakilisha kila kitu kwa njia ya Z.
Hiyo ndiyo sababu kidogo ijayo, au hii kidogo, kidogo ijayo ni moja hiyo waliochaguliwa kutofautisha kati na '.'
Hiyo pia ni kwa nini, katika meza ASCII, kuna 5 alama kutenganisha herufi kubwa kutoka barua lowercase.
Tangu wale ni ishara, 5 ziada huleta juu 32 kuwa tofauti baina yao.
[Mwanafunzi] Basi tunaweza kufanya hivyo, kwa sababu ASCII iliyoundwa kwa njia hiyo.
Ndiyo. Lakini ASCII - tofauti pia inaweza kuwa wote wawili wa bits haya.
Kama, kama walikuwa 10000001, na '' ilikuwa 11100001 - mimi kusahau, chochote.
Lakini ikiwa ni hii, basi sisi inaweza kutumia '- A.
Ni sasa tu na tofauti kati ya 'bado ni haya bits 2.
Nadhani imeandikwa 48. Je, ni 32 + 64? Nadhani ni?
Bado ingekuwa 2 bits; kila tabia moja, kama, Z na z, K na k,
wangeweza bado kuwa sawa bits halisi kuweka isipokuwa kwa wale bits 2.
Hivyo kwa muda mrefu kama hiyo ni kweli daima, bila ya kujali kama sisi ni kutumia ASCII au baadhi mfumo mwingine,
muda mrefu kama kuna tu kuweka idadi ya vipande ambayo ni tofauti kwa ajili ya tabia ya kila,
basi kazi nzuri.
Ni kwamba tu 32 ilianzishwa kwa sababu ni moja ya kwanza sisi inaweza uwezekano kutumia. >> Cool.
Mimi huwa wanapendelea, katika kesi hawajaona, kama block ni line moja tu,
unaweza kujikwamua ya braces curly; hivyo mimi huwa wanapendelea kufanya hili.
Pia, unajua jinsi gani tunaweza kufanya mambo kama s [i] + = 1?
Unaweza pia kufanya s [i] bitwise NA = 32.
Na bitwise AU = 32.
Pia, kuhesabu Mod 2 == 0.
Basi kumbuka kwamba - mimi si kuandika ni - thamani yoyote yasiyo ya sifuri ni kweli, na 0 ni uongo.
Hivyo "kama kuhesabu Mod 2 == 0" ni sawa na kusema "kama si kuhesabu Mod 2."
Mimi pengine ingekuwa tu kuachwa mistari na alisema, "kama kuhesabu Mod 2,
je AU 1, mwingine kufanya NA 1, "ili kwamba mimi hakuwa na haja ya" si. "
Lakini hii kazi tu kama vizuri.
Na kile kingine naweza kufanya hapa?
Unaweza kuchanganya yao na ternary kama alitaka, lakini basi d tu kufanya mambo messier
na pengine zaidi vigumu kusoma, hivyo tutakuwa na si kufanya hivyo.
Mtu yeyote kuwa mapendekezo yoyote mengine?
Ni kwamba tatizo yote aliuliza kwa? Oh yeah.
Hivyo kujikwamua mistari haya ya tupu, sasa tutaweza magazeti f,% s kuwa moja kwa masharti,
Sisi magazeti f, s.
Sasa hebu kukimbia. Je, mimi kufanya kitu chochote kibaya?
Hiyo ni \ ", mimi nataka n.
Sawa. Sasa tutaweza kukimbia. Ni pengine itabidi yell saa yangu.
Strlen ni katika string.h.
Hivyo hii ni kitu kizuri kuhusu Clang ni anakwambia nini ni katika,
badala ya GCC ambayo tu anasema, "Hey, wewe wamesahau kitu, sijui ni kitu gani."
Lakini hii kuniambia, "Wewe ni pamoja na maana ya string.h."
Hivyo sikuweza kuchochea kwa kitu chochote, hivyo si kusema chochote.
Lakini tutaweza kufanya mfano wao, "Shukrani 4 kuongeza".
Hiyo inaonekana haki. Hooray.
Hivyo kurejea kuu yako, mimi karibu kamwe kufanya hivyo.
Ni hiari. Na kuu ni kazi tu kwa ajili ya ambayo ni ya hiari.
Kama huna kurudi kitu chochote kutoka kuu, ni kudhani kuwa wewe maana kurudi 0.
Maswali?
Sawa. Hivyo sasa tatizo la pili.
"Kumbuka kutoka hotuba wiki 2 wa pili kwamba swapping maadili 2 vigezo 'kwa kupita
wale vigezo 2 kwa kazi (hata kama kuitwa byta) haina hasa kazi, angalau si bila 'kuyatumia.' "
Na kupuuza kuyatumia mpaka sisi kupata kwao.
Tunataka wabadilishane vigezo 2; sisi siyo kutumia kazi ya kufanya.
Bado tuko kwenda kufanya hivyo katika kuu kama inavyosema.
Lakini kwa kutumia vigezo wale 2, hatutaki kutumia variable muda.
Kuna 2 njia za kufanya hivi.
Unaweza kufanya hivyo kwa kutumia waendeshaji yako jadi binary.
Hivyo haina mtu yeyote kujua njia ya haraka na chafu ya kufanya hivyo?
Inawezekana kweli kuchukua dakika ya kufikiri. Kama mimi na -
Mimi itabidi kuweka tatizo juu kama wao kuomba. Hivyo kama nina vigezo 2,, ambayo ni tu integer
kwamba wao nipe, na Jumla B variable, ambayo ni mwingine integer kwamba mimi nina aliyopewa.
Hivyo kama nina vigezo hizi 2, sasa mimi nataka byta yao.
jadi, kwa kutumia waendeshaji yako ya kawaida binary, I mean, kama +, -, ÷.
Si bitwise waendeshaji ambayo kutenda juu ya binary.
Hivyo kwa kutumia -, +, ÷, na wale wote.
Tunaweza wabadilishane kwa kufanya kitu kama = a + b, na b = a - b, a = a - b.
Hivyo, sanity kuangalia, na kisha tutaweza kuona kwa nini kazi hiyo.
Hebu sema = 7, b = 3, kisha + b ni kwenda kuwa 10.
Hivyo sisi ni sasa kuweka 10 =, na kisha sisi ni kufanya b = a - b.
Hivyo sisi ni kufanya b = a - b, ambayo ni kwenda kuwa 7, na b = a - b tena,
au = a - b. Ambayo ni kwenda kuwa 10-7 ambayo ni 3.
Hivyo sasa, kwa usahihi, '' ilikuwa 7, b mara 3, na sasa ni 7 na b '' ni 3.
Hivyo kwamba aina ya mantiki; '' ni mchanganyiko wa namba 2.
Katika hatua hii, '' ni mchanganyiko, na kisha sisi ni subtracting nje b awali,
na kisha sisi ni subtracting nje nini mara ya awali '.'
Lakini hii haina kazi kwa namba zote.
Kuona hii, hebu fikiria mfumo; hivyo sisi kufikiri ya kawaida integers kama bits 32.
Hebu kazi juu ya kitu tu kama bits 4.
Hopefully mimi kuja na mfano mzuri sasa.
Kwa hiyo, mimi kujua, hii itakuwa rahisi.
Hebu sema wetu 2 idadi ni 1111, na 1111, hivyo tuko katika binary hivi sasa.
Katika decimals halisi, kama unataka kufikiria ni kwa njia hiyo, = 15 na b = 15.
Na hivyo sisi kutarajia, baada ya sisi byta yao - hawana hata kuwa idadi sawa,
lakini mimi alifanya hivyo kwa njia hii.
Hebu kufanya nao si namba moja. Hebu kufanya 1111 na 0001.
Hivyo = 15 na b = 1.
Baada ya sisi byta yao, sisi kutarajia '' kuwa na 1 b kuwa 15.
Hivyo hatua yetu ya kwanza ni = a + b.
Idadi yetu ni 4 tu bits mbalimbali, hivyo ',' ambayo ni 1111, + b, ambayo ni 0001,
ni kwenda kuishia kuwa 10,000, lakini sisi tu bits 4.
Hivyo sasa = 0.
Na sasa tunataka kuweka b = a - b - kweli, hii bado kazi nje kikamilifu.
= A - hebu angalia kama hii kazi nje kikamilifu - b.
Hivyo basi b = 0-1, ambayo bado ingekuwa 15, na kisha = a - b, ambayo itakuwa ni 1.
Labda hii haina kazi.
Najisikia kama kuna sababu haifanyi kazi kwa kutumia mara kwa mara.
Sawa, hivyo kufanya kazi kwa kudhani kuwa haifanyi kazi na shughuli za mara kwa mara binary,
nami kuangalia kwa - Mimi Google kuona kama ni kweli.
Hivyo tunataka kufanya hivyo kwa kutumia kampuni za bitwise, na kidokezo hapa ni XOR.
Hivyo, kuanzisha XOR (^) kama hawajaona bado.
Ni, tena, operator bitwise hivyo ni vitendo kidogo kidogo, na it's -
Kama una bits 0 na 1, basi hii itakuwa 1.
Kama una bits 1 na 0, utakuwa ni 1, una bits 0 0 na utakuwa 0,
na kama una bits 1 na 1 utakuwa 0.
Hivyo ni kama AU. Kama mojawapo ya bits ni kweli, ni 1, lakini tofauti na AU, haiwezi kuwa wote bits kwamba ni kweli.
AU ingekuwa hii kuwa 1, XOR ingekuwa hii kuwa 0.
Hivyo sisi ni kwenda wanataka kutumia XOR hapa.
Fikiria juu yake kwa dakika; nitakacho Google.
Naam, huwezi kusoma kwamba, mimi nina sasa juu ya ukurasa XOR byta algorithm.
Hopefully hii kueleza kwa nini mimi can't -
Hii ni hasa algorithm kwamba sisi tu alivyofanya.
Mimi bado hawaoni ni kwa nini - Mimi lazima tu ilichukua mfano mbaya,
lakini kesi hii ambapo 'kilichotokea kwa kuwa 0, baada ya kupata bits 5, hivyo sasa' ni 0,
kwamba ni kile kinachoitwa "integer kufurika."
Kulingana na Wikipedia, "Tofauti byta XOR, tofauti hii inahitaji kwamba anatumia mbinu baadhi
kuhakikisha kwamba x + y haina kusababisha kufurika integer. "
Hivyo hii ina matatizo, hii ilikuwa integer kufurika, lakini mimi alifanya kitu kibaya.
Mimi nina uhakika. Nitajaribu kuja na mwingine mmoja.
[Mwanafunzi] Naam, ni si integer kufurika wakati wewe ni kujaribu kuweka namba katika huko
kubwa kuliko kiasi cha bits una zilizotengwa?
Yeah. Tuna bits 4. That's - tulikuwa na bits 4, sisi basi kujaribu kuongeza 1 kwa hivyo, hivyo sisi kuishia na bits 5.
Lakini kidogo tu tano yanakatwa, yeah.
Ni nguvu kweli -
[Mwanafunzi] Je, hiyo kutupa wewe makosa, au gani kwamba - itakuwa kwamba kutupa kosa?
No Hivyo hakuna makosa. Wakati wewe kupata ngazi ya kanisa, kidogo maalum
mahali fulani kwamba ni kuweka alisema kuna kufurika, lakini katika C wewe aina ya si tu kukabiliana na kwamba.
Wewe kweli hawawezi kukabiliana nayo isipokuwa wewe kutumia maelekezo maalum mkutano katika C.
Hebu fikiria kuhusu byta XOR.
Na nadhani makala ya Wikipedia inaweza pia wamekuwa wakisema kwamba -
Hivyo ni pia akalileta hesabu msimu, hivyo mimi nadhani ilikuwa, katika nadharia, kufanya hesabu byggelement
wakati mimi alisema kuwa 0-1 ni 15 tena.
Hivyo kwamba kunaweza - juu ya processor mara kwa mara kwamba anafanya 0-1 = 15.
Tangu sisi kuishia katika 0, sisi Ondoa 1, hivyo basi tu Wraps nyuma karibu na 1111.
Hivyo algorithm hii ili kweli kazi, + b, - b, b - a; ambayo inaweza kuwa faini.
Lakini kuna baadhi ya wasindikaji ambayo si kufanya hivyo, na hivyo itakuwa ni faini katika wale wale maalum.
XOR byta kazi juu ya processor yoyote. Sawa.
Wazo ni kwamba, ni walidhani kuwa sawa, ingawa.
Ambapo sisi ni kutumia XOR kwa namna fulani kupata taarifa ya wote ndani ya 1 ya vigezo,
na kisha kuvuta habari nje ya vigezo ya mtu binafsi tena.
Hivyo haina mtu yeyote kuwa na mawazo / jibu?
[Mwanafunzi jibu, unintelligible]
Hivyo hii lazima kazi, na pia, ni XOR unaofanyika.
Bila kujali ambayo ili hizi namba 2 kutokea kwa kuwa katika hapa,
matokeo haya ni kwenda kuwa sawa.
Hivyo ^ b ni b ^ a.
Unaweza pia kuona hii imeandikwa kama ^ = b, b ^ = a, a ^ = b tena.
Hivyo hii ni haki, na kuona kwa nini hii kazi, kufikiri ya sarafu.
Kutumia idadi smallish, hebu kusema 11,001, na 01,100.
Hivyo hii ni '', hii ni kwa b.
Hivyo ^ = b.
Sisi wanaenda kuweka = 'A' na XOR ya mambo haya 2.
Hivyo 1 ^ 0 ni 1; 1 ^ 1 ni 0; 0 ^ 1 ni 1, na 0 0 ^ ni 0; 1 ^ 0 ni 1.
Hivyo ',' kama ukiangalia idadi decimal, itakavyo kuwa -
wewe si kwenda kuona mengi ya uhusiano kati ya awali 'na mpya', '
lakini kuangalia bits, '' sasa ni kama matundu ya habari
wa wote asili 'na b awali.
Hivyo kama sisi kuchukua b ^, tunaona kwamba sisi kuishia katika asili '.'
Na kama sisi kuchukua asili '' ^ mpya ',' tunaona sisi kuishia katika b awali.
Hivyo (a ^ b) ^ b = awali '.'
Na (a ^ b) ^ a = b awali.
Kuna - njia nyingine ya kuona hii ni kitu chochote XOR yenyewe ni daima 0.
Hivyo 1101 ^ 1101, bits wote wataenda kuwa sawa.
Hivyo kuna kamwe kwenda kuwa kesi ambapo 1 ni 0 na nyingine ni 1.
Hivyo hii ni 0000.
sawa na hii. (^ B) ^ b ni kama ^ (b ^ b).
(B ^ b) ni kwenda kuwa 0; ^ 0 ni kwenda tu kuwa ',' tangu bits wote ni 0.
Hivyo wale tu kwamba ni kwenda kuwa ambapo 'awali ilikuwa 1 - alikuwa ndio.
Na wazo sawa hapa, mimi nina uhakika pretty pia ni unaofanyika.
Yeah. Sikuweza kusema kabla ya kuwa ni unaofanyika.
^ ',' Na ni associative, hivyo sasa (b ^ a) ^ a.
Na tunaweza kufanya b ^ (a ^ a).
Na hivyo tena, sisi kupata b awali.
Hivyo '' sasa ni mchanganyiko wa b 'na kwa pamoja.
Kutumia combo wetu mpya 'tunasema b = combo' '^ b awali, sisi kupata asili'. '
Na sasa combo = '' ^ b mpya, ambayo ilikuwa ya awali - au ambayo sasa ni nini ilikuwa '' au b.
Hiyo ni kesi hii chini hapa. Hii ni = b, umri b.
Hivyo sasa kila kitu ni nyuma ili swapped.
Kama sisi kweli inaonekana katika bits, b = a ^ b, ni kwenda XOR hizi 2,
na jibu ni kwenda kuwa hii, na kisha = a ^ b ni XORing hizi 2 na jibu ni hili.
Maswali? Sawa. Hivyo moja ya mwisho ni kiasi fulani kwa kiasi kikubwa magumu zaidi.
[Mwanafunzi] Nadhani yeye ana swali kuhusu hilo. >> Oh, sorry.
[Mwanafunzi] Nini kweli kasi? Kama wewe kutumia hii XOR, au ni kama wewe kutangaza variable mpya?
Hiyo ni nini kweli kasi, kutangaza variable mpya au kutumia XOR wabadilishane?
Jibu ni, katika uwezekano wote, variable muda.
Na kwamba ni kwa sababu mara moja ni compiled chini - hivyo katika ngazi ya kanisa,
hakuna kitu kama vigezo mitaa au vigezo yoyote muda au yoyote ya mambo haya.
Wao ni kama tu - kuna kumbukumbu, na kuna madaftari.
Madaftari ni ambapo mambo ni juhudi kinachotokea.
Huwezi kuongeza mambo 2 katika kumbukumbu; wewe kuongeza 2 mambo katika madaftari.
Na wewe kuleta mambo kutoka katika kumbukumbu madaftari na kisha kuongeza yao,
na basi unaweza kuweka yao nyuma katika kumbukumbu, lakini hatua zote hufanyika katika madaftari.
Hivyo wakati wewe ni kutumia muda variable mbinu, kwa kawaida kinachotokea ni
nambari hizi 2 ni tayari katika madaftari.
Na kisha kutoka kwamba uhakika juu, baada ya umefanya swapped yao,
hivyo itabidi tu kuanza kutumia rejesta nyingine.
Popote wewe amekuwa kutumia b, hivyo itabidi tu kutumia daftari kwamba alikuwa tayari hifadhi '.'
Hivyo hana haja ya kufanya kitu chochote kwa kweli kufanya byta. Yeah?
[Mwanafunzi] Lakini pia inachukua zaidi ya kumbukumbu, haki?
Itakuwa tu kuchukua zaidi ya kumbukumbu kama anahitaji kuhifadhi kwamba variable muda.
Kama kama wewe matumizi ya baadaye kwamba variable muda tena mahali fulani,
basi - au wewe hawawajui kitu variable kwamba muda mfupi.
Hivyo kama katika hatua yoyote katika muda ',' b katika temp kuwa na maadili tofauti au kitu,
basi ni kwenda na maeneo tofauti katika kumbukumbu, lakini ni kweli kwamba
kuna mengi ya ndani ambayo itakuwa vigezo tu kuwepo katika madaftari.
Katika kesi ambayo, ni kamwe kuweka katika kumbukumbu, na hivyo wewe kamwe kupoteza kumbukumbu.
Sawa. Swali la mwisho ni kidogo zaidi.
Hivyo hapa, katika hii appliance CS50, kuna kamusi.
Na sababu hii ni kwa sababu [?? B66] Kibonyezo cha kusahihisha kipo wapi wewe utakuwa kuandika
kutumia meza hash au inajaribu au baadhi muundo data.
Wewe utaenda kuandika kusahihisha Spell, na mtaenda kuwa na kutumia hii kamusi kufanya hivyo.
Lakini kwa tatizo hili, sisi ni kwenda tu kuangalia juu ya kuona kama ni neno moja katika kamusi.
Hivyo badala ya hifadhi ya kamusi nzima katika muundo baadhi data
na kisha kuangalia juu ya hati yote ili kuona kama kitu chochote ambacho misspelled,
sisi tu wanataka kupata 1 neno. Hivyo tunaweza tu Scan zaidi ya kamusi nzima
na kama sisi kamwe kupata neno katika kamusi nzima, basi ilikuwa si huko.
Kama sisi Scan zaidi ya kamusi nzima na wala kuona neno, basi sisi ni nzuri, sisi kupatikana.
Ni anasema hapa kwamba tunataka kuanza kuangalia katika hafla ya C ya faili-utunzaji,
tangu tunataka kusoma dictionary,
lakini mimi nitakupa dokezo hapa kama ambayo kazi unapaswa kufikiria.
Nitaandika juu yao Spaces.
Hivyo ndio kuu utasikia wanataka kuangalia ni f wazi na kisha, inevitably, f imefungwa,
ambayo kwenda katika mwisho wa programu yako, na f Scan f.
Unaweza pia kutumia f kusoma, lakini pengine hawataki
kwa sababu ya kuwa - wewe wala kuishia wanaohitaji kwamba.
F Scan f ni nini wewe kwenda kuwa na kutumia kwa Scan zaidi ya kamusi.
Na hivyo hawana haja ya Kanuni up ufumbuzi, kujaribu tu na kama Pseudo-code njia yako
kwa ufumbuzi, na kisha tutaweza kujadili.
Na kweli, tangu mimi tayari aliwapa hawa, kama kwenda ndani yoyote terminal au shell appliance yako,
Napenda - Mimi kawaida - kama hawajaona bado, sijui kama alivyofanya katika darasa,
lakini mtu, hivyo kurasa mtu, ni muhimu kwa ajili ya pretty kuangalia kiasi pretty kazi yoyote.
Hivyo siwezi kufanya, kama, mtu f, Scan f.
Hii sasa ni info kuhusu familia Scan f ya kazi.
Mimi naweza pia kufanya f mtu, wazi, na kwamba kutakuwa na nipe maelezo ya kwamba.
Hivyo kama unajua nini kazi ni kwa kutumia, au wewe ni kusoma code
na unaweza kuona baadhi ya kazi na wewe ni kama, "Je, hii nini?"
Tu mtu kwamba kazi jina.
Kuna michache ya mifano weird ambapo unaweza kusema
kama. mtu 2 kwamba kazi jina, au mtu 3 kwamba jina kazi,
lakini wewe tu kufanya hivyo kama mtu kazi jina haina kutokea kwa kazi mara ya kwanza.
[Mwanafunzi] Hivyo nina kusoma ukurasa mtu kwa ajili ya wazi, lakini mimi bado wamechanganyikiwa juu ya jinsi ya kutumia hiyo na mpango.
Sawa. mengi ya kurasa mtu ni chini ya msaada.
Wao ni kufaa zaidi kama tayari kujua nini kufanya
na kisha wewe tu haja ya kukumbuka amri ya hoja au kitu.
Au wanaweza kukupa overview ujumla, lakini baadhi yao ni sana balaa.
Kama f Scan f, pia. Ni inakupa habari kwa wote wa kazi hizo,
na 1 line chini hapa kinachotokea kwa kusema, "F Scan f anayesoma kutoka hatua string au mkondo."
Lakini f kufungua. Hivyo, jinsi gani sisi kutumia f wazi?
wazo la mpango ambayo inahitaji kufanya faili I / O ni kwamba
wewe kwanza haja ya kufungua faili unataka kufanya mambo kwa, na inevitably,
kusoma mambo kutoka faili hilo na kufanya mambo pamoja nao.
F wazi ni nini sisi kutumia kufungua faili.
kitu sisi kupata nyuma, ili kile faili gani tunataka kufungua, ni inatupa -
katika hapa anasema "/ user / sehemu / Dict / maneno."
Hii ni faili kwamba tunataka kufungua, na tunataka kufungua -
tuna kupanga bayana kama tunataka kufungua kusoma au kama tunataka kufungua kuandika.
Kuna wanandoa ya mchanganyiko na stuff, lakini tunataka kufungua hili kwa ajili ya kusoma.
Tunataka kusoma kutoka faili.
Hivyo nini kurudi hili? Kuirudisha nyota faili (*),
na mimi itabidi kuonyesha kila kitu katika f variable, hivyo *,
tena, ni pointer, lakini hatutaki kukabiliana na kuyatumia.
Unaweza kufikiri ya f kama, f sasa ni kutofautiana utaenda kutumia kuwakilisha faili.
Hivyo kama unataka kusoma kutoka faili, unaweza kusoma kutoka f.
Kama unataka karibu ya SVG, wewe karibu f.
Hivyo mwisho wa mpango wakati sisi inevitably unataka kufunga faili, tunapaswa kufanya nini?
Tunataka kuifunga f.
Hivyo sasa mwisho faili kazi kwamba sisi ni kwenda wanataka kutumia ni Scan f, f Scan f.
Na nini kwamba hana ni scans juu ya faili kuangalia mfano kwa mechi.
Kuangalia ukurasa mtu hapa, tunaona int f Scan f, kupuuza thamani ya kurudi kwa sasa.
Hoja ya kwanza ni * faili mkondo, hivyo hoja ya kwanza tunakwenda wanataka kupitisha ni f.
Sisi ni skanning zaidi f.
Hoja ya pili ni string format.
Mimi nitakupa string format hivi sasa.
Nadhani sisi kutokea kwa kusema, 127s \ n, mengi ya kwamba lazima.
wazo la nini kwamba string format ni, ni unaweza kufikiria f Scan kama kinyume cha f magazeti.
Hivyo magazeti f, magazeti f sisi pia kutumia aina hii ya parameter format,
lakini katika f magazeti nini tuko kufanya ni - hebu angalia sawa.
Hivyo magazeti f, na huko ni kweli pia f magazeti f, ambapo hoja ya kwanza ni kwenda kuwa f.
Wakati magazeti f, tunaweza kusema kitu kama, "magazeti 127s \ n" na kisha kama sisi kupita baadhi kamba,
itakavyo magazeti hii kamba na kisha mstari mpya.
Nini 127 njia, nina uhakika pretty, lakini sijawahi vikwazo mwenyewe kwa hiyo,
Wewe bila hata haja ya kusema '127 'katika f magazeti,
lakini nini maana ni magazeti kwanza wahusika 127.
Hivyo nina uhakika pretty hiyo kesi. Unaweza Google kwa ajili hiyo.
Lakini katika moja ijayo nina karibu chanya maana yake ni kwamba.
Hivyo hii ni magazeti kwanza wahusika 127, ikifuatiwa na mstari mpya.
F Scan f sasa, badala ya kuangalia kutofautiana na uchapishaji yake,
ni kwenda kuangalia string baadhi, na kuhifadhi mfano ndani ya kutofautiana.
Hebu kweli matumizi Scan f katika mfano tofauti.
Hivyo hebu sema tulikuwa baadhi int, x = 4,
na sisi alitaka kujenga string maandishi - alitaka kujenga string
kwamba ilikuwa kama, hii itakuja baadaye sana,
kitu ambacho kama tu 4.jpg.
Hivyo hii inaweza kuwa mpango ambapo utakuwa na jumla ya kukabiliana,
jumla kukabiliana i, na unataka kuokoa rundo la images.
Hivyo unataka kuokoa i.jpg, ambapo i ni baadhi iteration ya kitanzi wako.
Hivyo ni jinsi gani sisi kufanya hii string kwa kuwa JPEG?
Kama alitaka magazeti 4.jpg, tunaweza kusema tu magazeti f,% d.jpg,
na basi ingekuwa magazeti kwa kuwa JPEG.
Lakini kama tunataka kuokoa 4.jpg kamba, sisi kutumia Scan f.
Hivyo string s - kweli sisi can't - tabia, char s, hebu kwenda 100.
Hivyo mimi tu alitangaza baadhi ya safu ya wahusika 100,
na kwamba ni nini sisi ni inevitably kwenda kuwa hifadhi ya kwamba JPEG in
Hivyo sisi ni kwenda kutumia Scan f, na format, jinsi sisi kusema% d.jpg
ili magazeti 4.jpg, muundo wa hii ni kwenda kuwa% d.jpg.
Hivyo ni format% d.jpg, nini tunataka kuchukua nafasi% d na ni x,
na sasa tunahitaji kuhifadhi kwamba string mahali fulani.
Na pale ambapo sisi ni kwenda kuhifadhi hii string ni katika safu ya.
Hivyo baada ya line hii ya maadili, s, ikiwa sisi magazeti f,% s ya s variable,
itakavyo magazeti 4.jpg.
Hivyo f Scan f ni sawa kama Scan f, ila sasa ni kuangalia juu ya faili hii
kwa nini kuhifadhi katika s.
Hiyo ni nini hoja ya mwisho itakuja kuwa.
Tunataka kuhifadhi - "Scan f familia ya scans kazi katika wote kulingana na muundo kama walijaribu chini.
Kama yoyote ni kuhifadhiwa katika pointi mahali unaweza kurudi - "
Hapana, sisi inaweza kuwa nzuri. Hebu fikiria kwa pili.
Hivyo Scan f haina - nini heck ni kazi ambayo hana kwamba?
Hivyo Scan f si kwenda kuchukua integer na kufanya dot jpg.
Ni kwenda [mumbles].
Ila variable int katika string int C.
Nini ni variable hii, au ni nini kazi hii iitwayo?
Ndiyo. That's - ndiyo. Hivyo kile nilikuwa na kufafanua kwa wewe kabla ilikuwa s magazeti f,
ambayo - kwamba inafanya mengi zaidi akili, kwa nini mimi alisema ilikuwa zaidi kama f magazeti.
Scan f bado ni aina ya kama f magazeti, lakini s magazeti f ni kwenda Scan juu ya
na kuchukua nafasi ya vigezo na sasa kuhifadhi katika kamba.
Badala ya uchapishaji hilo, ni maduka yake katika kamba.
Hivyo kupuuza kwamba kabisa. Unaweza bado kufikiria specifier format kama kama wa f magazeti.
Hivyo sasa, kama sisi alitaka kufanya kitu 4.jpg, tunataka kufanya s magazeti f, x ya hili.
Basi nini Scan f ni kufanya - kile swali lako kwenda kuwa?
[Mwanafunzi] Nina kuchanganyikiwa tu juu ya nini sisi ni kujaribu kufanya haki hapa
na kwamba JPEG. Je, unaweza kueleza kwamba 1 zaidi ya muda?
Hivyo hii ilikuwa - ni chini relevent kwa f Scan f sasa; hopefully, itakuwa kumfunga nyuma katika baadhi ya aina ya njia.
Lakini kile Mimi awali alikuwa amekusudia kuonyesha ilikuwa - hii ni kweli moja kwa moja muhimu kwa [haya? F5]
Wewe utaenda kuwa wanatumia magazeti f, ambapo, kusema tuna images 100,
na unataka kusoma picha 1.jpg, 2.jpg, 3.jpg.
Hivyo ili kufanya hivyo, unahitaji f wazi, na kisha una kupita katika string kwamba unataka kufungua.
Hivyo tunataka unataka kufungua 1.jpg; ili kujenga string kwamba ni 1.jpg,
magazeti sisi kufanya s f% d.jpg-sisi hakufanya kwa int i = 0.
i <40, i + +.
Hivyo s magazeti f% d.jpg ya i.
Hivyo baada ya mstari huu, sasa variable au s safu ni kwenda 1.jpg.
Au, 0.jpg, 1.jpg, 2.jpg. Na hivyo tunaweza kufungua, kwa upande mwingine, kila picha kwa ajili ya kusoma.
Hivyo kwamba ni nini s magazeti f gani. Je, unaweza kuona nini s magazeti f sasa ni kufanya?
[Mwanafunzi] Sawa, hivyo ni kuchukua - inajenga kamba, something.jpg, na kisha maduka hayo.
Ndiyo. Ni inajenga - hii ni mwingine string format, kama tu Scan f na f magazeti,
ambapo ni kuwekeza yote ya vigezo katika hoja ya pili, inaweza kuwa ni kinyume na i.
Labda - I mean, hiyo kesi. Lakini chochote utaratibu wa hoja ni.
Ni kwenda Insert wote wa vigezo katika string format
na kisha kuhifadhi katika buffer yetu, sisi wito kwamba buffer, ni mahali ambapo sisi ni hifadhi ya kamba.
Hivyo sisi ni hifadhi ndani ya s string usahihi-formatted, d% baada ya kubadilishwa na 4.
[Mwanafunzi] Hivyo kama sisi alifanya hivyo, ni f variable tu kwenda kuwa reassigned?
Ndiyo. Hivyo tunapaswa kufunga f awali kabla ya kufanya hivyo.
Lakini - na kisha pia, kama kulikuwa na si f kufungua hapa, basi tutakuwa haja ya kusema -
Yeah. Lakini itakuwa ni wazi mia files tofauti.
[Mwanafunzi] Lakini sisi bila kuwa na uwezo wa kupata au - sawa.
Sawa. Hivyo Scan f, f Scan f, ni aina ya wazo moja,
lakini badala yake, badala ya hifadhi hiyo ndani ya kamba, ni zaidi kama wewe ni sasa
kwenda juu ya kuumwa na muundo vinavyolingana dhidi string kwamba na kuhifadhi matokeo katika vigezo.
Unaweza kutumia f Scan kuchanganua juu ya kitu kama 4.jpg, na kuhifadhi 4 integer ndani ya x int Jumla.
Hiyo ni nini tunaweza kutumia Scan f kwa.
F Scan f anaenda kufanya kuwa katika mstari amri.
Mimi kwa kweli pretty sure hii ni nini maktaba CS50 gani.
Hivyo wakati wewe kusema, "kupata int," ni Scan f-ing juu - Scan f ni njia ya kupata mtumiaji pembejeo.
F Scan f ni kwenda kufanya kitu kimoja lakini kwa kutumia faili Scan juu.
Hiyo hapa, sisi ni juu ya skanning faili hii.
mfano sisi ni kujaribu mechi ni baadhi string kwamba ni wahusika 127 kwa muda mrefu
ikifuatiwa na mstari mpya
Hivyo nina uhakika pretty tunaweza hata kusema tu "mechi s," tangu katika kamusi
sisi kutokea kwa kuwa, sisi ni uhakika hakuna neno ni kwamba kwa muda mrefu,
na pia f Scan f, nadhani, itakuwa kuacha katika mstari mpya bila kujali.
Lakini tutaweza ni pamoja na mstari mpya katika mechi, na -
[Mwanafunzi] Kama sisi hawakuwa ni pamoja na mstari mpya, bila kupata sehemu ya neno?
Ni - kila - kuangalia kamusi -
Hivyo katika kamusi, haya yote ni ya maneno yetu.
Kila mmoja ni juu ya mstari mpya.
f Scan ni kwenda kuchukua neno hili.
Kama hatuwezi ni pamoja na mstari mpya, basi inawezekana kwamba ijayo Scan f tu kusoma mstari mpya.
Lakini ikiwa ni pamoja na mstari mpya basi tu kupuuza mstari mpya.
Lakini tutaweza kamwe kupata sehemu ya neno, kwani sisi ni daima kusoma hadi mstari mpya, bila kujali.
[Mwanafunzi] Lakini nini kama wewe tafuta kwa neno "cissa," kama cissa.
Je, ni kupata kwamba, na kusema ni mechi?
Hivyo hapa sisi - itakuwa kusoma katika - hii ni hatua nzuri kwa kweli.
Sisi ni kamwe kutumia sasa - neno sisi ni kuangalia kwa ni ya kwanza ya mstari amri hoja.
Hivyo kamba, neno = argv 1.
Hivyo string sisi ni kuangalia kwa ni argv 1.
Sisi si kutafuta neno wakati wote katika Scan f yetu.
Nini tunafanya kwa Scan f ni kupata kila neno katika kamusi,
na kisha mara moja kwamba tuna neno tunakwenda kutumia strcmp kwa kulinganisha yao.
Sisi ni kwenda kulinganisha neno yetu na nini sisi kusoma tu in
Hivyo inevitably, tunakwenda kuishia kufanya rundo la Scan FS
mpaka tu hivyo hutokea kwamba f Scan atarudi -
itakuwa kurudi moja, kwa muda mrefu kama ina kuendana neno jipya,
na atarudi kitu kingine kwa haraka kama ni imeshindwa mechi neno.
Sisi ni kusoma zaidi ya kamusi nzima, hifadhi mstari kwa mstari kila neno katika s kutofautiana.
Kisha sisi ni kulinganisha neno na s, na kama kulinganisha == 0,
strcmp kinachotokea kuleta 0 ikiwa mechi kilichofanyika.
Hivyo kama ilikuwa 0, basi tunaweza magazeti f, kuwianishwa,
au neno ni katika kamusi, au chochote unataka magazeti f.
Na kisha - sisi hawataki f karibu tena na tena.
Hii ni aina ya kitu tunataka kufanya, na sisi si kuangalia tu kwa neno katika kamusi.
Hivyo tunaweza kufanya kwamba, kama sisi alitaka kuangalia kwa mfano wao, cissa, kama wewe alisema kabla,
kama sisi alitaka kuangalia kwa mfano kwamba, basi ingekuwa kushindwa katika kesi
kwa sababu hiyo siyo kweli neno, lakini moja ya maneno katika kamusi kinachotokea kwa kuwa katika siku hiyo.
Hivyo itakuwa mechi neno hili, lakini hii subset ya neno ni neno lenyewe.
Lakini si kwamba jinsi tunayatumia; sisi ni kusoma katika kila neno
na kisha kulinganisha neno ya sisi kuwa na neno hilo.
Hivyo sisi ni daima kulinganisha maneno kamili.
Siwezi kutuma nje ufumbuzi kukamilika baadaye.
Hii ni aina ya jibu sahihi karibu, nadhani.
[Mwanafunzi maoni, unintelligible]
Oh, je, mimi kujikwamua kwamba kabla? Char, nadhani sisi alisema 127 - I kusahau kile kubwa ni.
Tutaweza tu kufanya 128, hivyo sasa s ni muda wa kutosha.
Hatuna haja ya magazeti ya kitu chochote.
Sisi ni pia atataka tufunge faili wetu, na kwamba lazima kuhusu jibu sahihi.
CS50.TV