[Powered by Google Translate] [Solisyon - Set Pwoblèm 5] [Zamyla Chan - Inivèsite Harvard] [Sa a se CS50. - CS50.TV] Tout dwa. Hello, tout moun, epi byenveni nan solisyon 5. Pset5 se Misspellings, nan ki nou pral fè yon période-korektè. Eple-dam yo ekstrèman enpòtan. Sa a te janm rive ou? Ou ap travay trè, trè provizyon sou yon papye pou yon echanj kout zam ak Lè sa a, toujou fini jwenn yon rad lumineux trè tankou yon D oswa yon = D ak tout paske ou se beke nan liverwurst nan pawòl Bondye a balèn lajè. Wi, koreksyon piman ou a se yon kesyon de a, fèblès la pli ekstrèm. Sa a se yon pwoblèm ki afekte mal, elèv yo mal. Mwen te yon fwa te di pa tòtirè sith klas mwen ke mwen pa janm ta jwenn nan yon kolèg bon. Epi sa a, tout mwen janm te vle, ki nan tout sa nenpòt jenn ti kabrit vle nan laj m 'yo, jis jwenn nan yon kolèg bon. Epi li pa jis nenpòt kòlèg. No mwen te vle pou yo ale nan yon kolèg Legal Ivory. Se konsa, si mwen pa t 'amelyorasyon, ale ta dwe rèv mwen an ale nan Harvard, Jale, oswa Prizon - ou konnen, nan prizon, New Jersey. Se konsa, mwen te resevwa tèt mwen yon période-korektè. Sa se yon ekstrè ti kras nan youn nan atis pi renmen pawòl mwen pale, Taylor Mali. Anyway, kòm li te di, enpòtans ki genyen nan gen yon période-korektè a trè enpòtan. Se konsa, byenveni nan solisyon 5, nan ki nou pral pale de pset5: Misspellings, nan ki nou pral fè anpil pwòp nou an période-korektè. Bwat zouti pou la pou semèn sa a, kòd la distribisyon, a pwal enpòtan gade nan jis yo konprann fonksyon ki diferan ki diksyonè ou a pral nan genyen. Nou ap aktyèlman yo pral gen miltip. C dosye ke ansanm fè pset nou an. Se konsa, kap nan aspè yo diferan, menm si nou ap aktyèlman pa editing youn nan dosye yo, speller.c, konnen li montre kouman li travay ak relasyon ak dictionary.c, ki nou pral ekri, a pwal trè enpòtan. Espèk nan pset tou gen yon anpil nan enfòmasyon itil an tèm de bagay sa yo ke ou ka asime, règ ak bagay sa yo tankou sa, kidonk asire ou li espèk nan pset ak anpil atansyon pou jwenn konsèy. Men, lè ou gen yon dout nan yon règ oswa yon bagay tankou sa, lè sa a toujou, al gade nan pset espèk a oswa Diskite sou. Sa a pset ki pral depann anpil sou endikasyon, pou nou vle asire ke nou konprann diferans ki genyen ant ajoute zetwal la devan non konsèy la ak ampersands, ki jan yo libere yo, elatriye Se konsa, yo te yon mèt nan pwent a pwal trè itil nan sa a seri pwoblèm. Nou pral gade nan lis lye yon ti jan pi plis, kote nou gen eleman ke nou rele nœuds ki gen tou de yon valè kòm byen ke konsèy yon ne nan pwochen, epi konsa esansyèlman ki lye ak eleman diferan youn apre lòt la. Gen yon kèk opsyon diferan de egzekite diksyonè aktyèl ou yo. Nou pral gade nan de metòd prensipal yo, ki se tab regle ak Lè sa a, ap eseye. Nan tou de nan sa yo, yo gen ladan yo kèk kalite nosyon nan yon lis lye kote ou te eleman lye youn ak lòt. Se konsa, nou pwal gade sou ki jan ou ka kapab opere alantou lye lis, kreye yo, navige an tèm de ki jan yo, pou egzanp, insert yon ne nan li oswa gratis nan tout nœuds yo kòm byen. An tèm de libere nœuds, sa ki nan vrèman enpòtan ke chak fwa nou memwa malok, apre sa nou libere li. Se konsa, nou vle asire ke pa gen okenn konsèy ale unfreed, pou nou pa gen okenn fwit memwa. Nou pral entwodui yon zouti ki rele Valgrind ki kouri pwogram ou an ak chèk si tout memwa a ke ou resevwa lajan se lè sa a te libere. Pset ou a ap sèlman ranpli lè li travay ak li gen fonctionnalités plen, men tou, Valgrind di ou ke ou pa jwenn kote dlo ap koule memwa. Finalman, pou sa a pset, mwen reyèlman vle ensiste sou - Mwen vle di, kòm dabitid, se mwen menm definitivman yon sipòtè nan lè l sèvi avèk plim ak papye pou aparèy televisyon HD pwoblèm ou an, men pou yon sèl sa a, mwen panse ke plim ak papye a pwal enpòtan sitou lè ou vle yo fè desen flèch yo bagay sa yo ak konprann ki jan bagay sa yo travay. Se konsa, definitivman eseye sèvi ak plim ak papye trase bagay sa yo deyò anvan ou jwenn kodaj paske li te ka jwenn yon ti jan sal. Premyèman, kite yo ale nan lis lye yon ti jan. Linked lis konpoze de nœuds, kote chak ne te gen yon valè ki asosye ak li, kòm osi byen yon konsèy ne ki vini apre l '. Yon koup de bagay sa yo enpòtan ak lis ki ki te lye yo se ke nou bezwen sonje kote ne premye nou an, se, ak Lè sa a, yon fwa nou konnen ki kote ne an premye se, ki fason nou kapab jwenn aksè nan ne an ki pwen yo ne premye ak Lè sa a, yon sèl la apre sa ak youn nan apre sa. Lè sa a, eleman an dènye nan lye lis ou a se konsèy ki ne la se toujou ale nan lonje dwèt sou nil. Lè yon pwen ne nil, lè sa a ou konnen ke ou te rive nan nan fen lis la, ki ki ne se youn nan dènye jou a, ke pa gen anyen apre sa. Isit la nan sa a chematikman, ou wè kèk flèch yo se endikasyon yo, epi li se seksyon nan ble kote valè a ap estoke, ak Lè sa a, ti bwat la wouj ak konsèy nan li se konsèy ne la lonje dwèt ne ki vini apre l '. Se konsa, nou wè isit la, ne la D ta lonje dwèt sou nil paske li se eleman an dènye nan lis la. Se pou yo gade nan ki jan nou ta ka defini yon struct pou yon ne. Epi depi nou vle gen nœuds miltip, sa a ki pral vin yon struct tipedèf nan ki nou pwal gen plizyè sikonstans diferan nan nœuds. Se konsa, nou defini li kòm yon kalite nouvo done. Isit la, nou gen yon ne struct tipedèf. Nan egzanp sa a, nou ap fè fas ak nœuds nonb antye relatif, konsa nou gen yon nonb antye relatif valè yo te rele ak Lè sa a, nou gen yon lòt konsèy, ak nan ka sa a, se yon konsèy nan yon ne, konsa nou gen yon ne struct * rele kap vini an. Lè sa a, nou ap rele sa a ne bagay tout antye. Asire w ke ou swiv sa a sentaks. Remake ne se aktyèlman referans moute pi wo a kòm byen ke pi ba a aparèy òtopedik yo Curly. Lè sa a, nan kenbe tras nan kote ne premye mwen an nan lis sa a lye, Lè sa a, mwen gen yon konsèy ne rele tèt, e mwen espas malok ase pou gwosè a nan yon ne. Avi, sepandan, ke tèt se aktyèlman yon konsèy ne tankou yo te opoze a yon ne aktyèl tèt li. Se konsa, tèt la aktyèlman pa gen nenpòt ki valè, li sèlman pwen kèlkeswa sa ki ne nan premye nan lye lis mwen an se. Pou jwenn yon sans pi bon nan lye lis, paske li trè enpòtan nan kenbe tras nan fè asire w ke ou kenbe chèn la, Mwen renmen panse a li kòm moun ki nan yon liy kenbe men, kote chak moun ap kenbe men ak yon sèl kap vini an. Ou pa ka wè nan desen sa a, men fondamantalman yo ap lonje dwèt moun nan pwochen ki nan chèn yo. Se konsa, si ou vle Traverse yon lis lye kote moun sa yo - imajine tout nan moun sa yo yo gen valè ki asosye ak yo epi tou li lonje dwèt sou moun nan nan pwochen liy la - si ou vle Traverse lis la lye, pou egzanp, swa edite valè yo oubyen pou chache yon valè oswa yon bagay tankou sa, Lè sa a, ou pral vle gen yon konsèy a moun nan espesifik. Se konsa, nou pwal gen yon kalite done konsèy ne. Pou sa egzanp, kite a rele l 'kurseur. Yon lòt fason komen nan non sa a ta ka iterator oswa yon bagay tankou sa paske li nan iteration sou yo ak aktyèlman ap deplase ki ne li nan lonje dwèt yo. Sa a isit la yo pral kurseur nou an. Kurseur nou an pral premye lonje dwèt sou eleman nan premye nan lis nou an. Se konsa, ki sa nou vle fè se nou ta fondamantalman ap kontinye kurseur a, deplase li ki sòti bò kote. Nan ka sa a, nou vle pou avanse pou pi li nan eleman nan pwochen nan lis la. Avèk ranje, ki sa nou ta fè se nou ta jis di nou ogmante endèks la pa 1. Nan ka sa a, ki sa nou bezwen fè se aktyèlman jwenn ki moun moun sa a kounye a se montre a, Epi sa a, pral fè valè kap vini an. Se konsa, si kurseur se jis yon konsèy ne, lè sa a sa nou vle fè se nou vle pou li ale nan valè a ki kurseur a ap lonje dwèt yo. Nou vle jwenn ak sa yo ki ne ak Lè sa a,, yon fwa nou ap nan ki ne, jwenn kote li lonje dwèt yo. Pou li ale nan ne aktyèl la ki kurseur a ap lonje dwèt a, anjeneral nou endike li pa (* kurseur). Sa ta ba ou ne aktyèl la ki kurseur a ap lonje dwèt yo. Lè sa a, apre sa, ki sa nou vle fè se nou vle gen aksè a kèlkeswa sa ki valè pwochen ne a se. Pou fè sa, gen aksè a valè yo andedan nan struct a, nou gen operatè a dot. Se konsa, Lè sa a, li ta (* kurseur). Vini yo. Men, sa a se yon ti jan sal an tèm de ki gen parantèz yo ozalantou kurseur la *, epi pou nou ranplase deklarasyon sa a tout antye ak kurseur>-. Sa a se yon priz ak Lè sa a, yon siy ki pi konsekan pase, se konsa fè yon flèch. kurseur-> kap vini an. Ki aktyèlman ap fè ou jwenn ne a ki pwen yo kurseur a. Sa valè se nan kap vini an. Se konsa, olye pou yo gen etwal la ak dot la, w ap ranplase sa ak yon flèch. Dwe pran anpil prekosyon a asire w ke ou eseye itilize sa a sentaks. Kounye a ke nou gen kurseur nou an, si nou vle gen aksè a valè a, anvan, nou te gen kurseur-> vini yo, men gen aksè a valè a nan ne an ki kurseur a ap lonje dwèt a, nou jis senpleman di ne-> valè. Soti nan gen, li la nan kalite done kèlkeswa sa nou te defini valè ak nœuds yo yo dwe. Si li nan yon ne Int, lè sa a kurseur-> valè se jis pral fè yon antye relatif. Se konsa, nou ka fè operasyon sou sa, tcheke egalite, bay li valè diferan, elatriye Se konsa, Lè sa a, ki sa ou vle fè si ou vle pou avanse pou pi kurseur ou a moun kap vini an, ou aktyèlman chanje valè la nan kurseur la. Depi kurseur se yon konsèy ne, ou chanje adrès nan konsèy aktyèl nan adrès ki nan ne nan pwochen nan lis ou a. Sa a se jis kèk postal kote ou ta ka rèspèté. Ki kote mwen gen kòmantè a fè yon bagay, sa a, se ki kote ou pwobableman pral gen aksè a valè a oswa fè yon bagay fè ak ki ne espesifik. Pou yo kòmanse li koupe, mwen di ke kurseur mwen okòmansman ki pral lonje dwèt sou eleman nan premye nan lis la lye. Se konsa, moute devan ou, mwen defini li kòm tèt la nan ne an. Kòm mwen mansyone anvan, libere se reyèlman enpòtan. Ou vle asire w ke ou libere chak eleman nan lis la yon fwa ou te fini ak li. Lè ou pa bezwen referans nenpòt nan moun sa endikasyon ankò, ou vle asire w ke ou libere tout moun ki endikasyon. Men, ou vle fè anpil atansyon isit la nan ke ou vle pou fè pou evite nenpòt fwit memwa. Si ou gratis yon sèl moun prematireman, lè sa a tout endikasyon yo ki ki pwen ne yo pral pèdi. Ale tounen nan egzanp lan moun a fè l 'yon ti jan pi plis segondè kalite bèl avantaj, kite a gen moun sa yo, eksepte nan ka sa a yo ap plan sou yon lak ak yon mons. Nou vle asire w ke chak fwa nou libere, nou pa pèdi ak kite ale nan nenpòt ki nœuds anvan nou te aktyèlman te libere yo. Pou egzanp, si ou te tou senpleman rele gratis sou nèg sa a isit la, Lè sa a, li ta dwe libere, men Lè sa a, tout mesye sa yo ta Lè sa a, ap pèdi epi yo ta flote epi tonbe desann. Se konsa, nou vle asire w ke olye de sa, nou vle kenbe yon ap mennen nan rès la. Konsèy tèt nou an, ki pwen eleman nan premye nan lis la. Li nan kalite tankou yon kòd mare moun a an premye. Ki sa ki ou ta ka vle fè lè ou libere yon lis ki genyen - Si ou vle libere eleman nan premye an premye, Lè sa a, ou ka gen yon konsèy tanporè ki pwen mèt fè tout sa eleman an premye se. Se konsa, ou gen konsèy tanporè ou lonje dwèt isit la. Nan fason sa a, nou gen yon kenbe nan ne la an premye. Lè sa a,, depi nou fè konnen ke ne nan premye yo pral lage, Lè sa a, nou ka deplase sa a kòd, sa a jete lank, tèt nou an, aktyèlman lonje dwèt sou tou sa youn nan premye se lonje dwèt yo. Se konsa, sa a tèt aktyèlman pwen eleman nan dezyèm kounye a. Koulye a, nou gen dwa libere kèlkeswa sa ki estoke nan tanporèr, epi pou nou ka efase ke san li mete an danje tout nœuds yo lòt nan lis nou an. Yon lòt fason ke ou ta ka fè sa ta ka chak fwa ou jis libere eleman an dènye nan lis la paske yo ap pa garanti pou pou dwe pwente anyen. Se konsa, ou te kapab jis libere yon sèl sa a, lè sa a gratis yon sèl sa a, lè sa a gratis sa a youn. Ki definitivman travay men se yon ti jan pi dousman paske pa nati a nan lis ki ki te lye, nou pa kapab jis imedyatman Ale nan yon sèl an dènye. Nou dwe Traverse chak eleman nan lis la lye ak tcheke si ke yon moun ap lonje dwèt nil, tcheke chak fwa, ak Lè sa a, yon fwa nou rive nan fen a, Lè sa a, gratis sa. Si ou te fè pwosesis sa a, ou ta aktyèlman ap tcheke isit la, tcheke isit la, Lè sa a, tcheke isit la, libere l ', Lè sa a, pral tounen, tcheke isit la, tcheke isit la, libere l ', tcheke isit la, ak Lè sa a, libere l '. Sa pran tan yon ti jan plis. Yeah. [Elèv] li ta kapab pran posib yo fè yon lis lye ki boutik yon konsèy sòti nan fen a? Sa ta dwe definitivman posib. Yo repete kesyon an, se li posib gen yon estrikti lis lye tankou ke ou gen yon konsèy lonje dwèt a nan fen lis la lye? Mwen ta di sa a, se sa posib, epi chak fwa ke ou insert yon bagay nan lye lis ou a ou ta gen mete ajou ki konsèy ak bagay sa yo tankou sa. Ou ta gen yon ke * ne, pou egzanp. Men, lè w ap mete ann aplikasyon karakteristik sa a, ou gen panse a komès konpwomi-a, renmen konbyen fwa mwen pral yo dwe iteration sou sa a, ki jan difisil se li pral fè nan kenbe tras nan ke a kòm byen ke tèt la kòm byen ke iterator mwen an, epi bagay sa yo tankou sa. Èske sa -? >> [Elèv] Yeah. Li posib, men an tèm de desizyon konsepsyon, ou gen peze opsyon yo. Isit la se yon skelèt nan kòd ki ta pèmèt ou libere chak eleman ki nan yon lis lye. Yon fwa ankò, depi mwen iteration sou yon lis lye, mwen pral vle gen kèk kalite kurseur oswa iterator. Nou ap iteration jouk kurseur a se nil. Ou pa vle répétèr lè kurseur ou a se nil paske sa vle di ke pa genyen yon anyen nan lis la. Se konsa, Lè sa a, isit la mwen te fè yon * ne tanporè lonje dwèt sa m ap konsidere se premye a nan lis mwen an, ak Lè sa a, mwen demenaje kurseur m 'lan devan 1 ak Lè sa a, gratis tou sa mwen te gen nan depo tanporè a. Koulye a, nou vin jwenn yo mete nan lis lye. Mwen genyen twa nœuds nan lis lye m 'yo, e kite yo ale ak ka a senp kote nou vle insert yon lòt ne nan fen lye lis nou an. Pou fè sa, tout sa nou ta fè se nou ta Traverse jwenn kote fen aktyèl la nan lis la lye se, se konsa kèlkeswa sa ki ne la lonje dwèt nil - sa a, se yon sèl sa a - ak Lè sa a, di, aktyèlman, yon sèl sa a pa a pwal ne nan dènye; nou ap aktyèlman pral gen yon lòt. Se konsa, nou ta gen sa a kounye a yon pwen a tou sa nou ap mete. Se konsa, kounye a moun sa a wouj isit la vin tounen ne an dènye nan lis la lye. Se konsa, karakteristik la nan ne an dènye nan lis la lye se ke li pwen nil. Se konsa, Lè sa a, ki sa nou ta dwe fè se mete konsèy sa a Guy wouj nan nil. Gen. Men, sa ki si nou te vle insert yon ne nan ant youn a dezyèm ak twazyèm? Sa se yon sèl pa byen kòm senp paske nou vle asire ke nou pa kite ale nan nenpòt ki ne nan lye lis nou an. Ki sa nou ta dwe fè se asire w ke nou jete lank tèt nou nan chak yon sèl. Pou egzanp, kite a rele sa a yon sèl dezyèm lan. Si ou te di ke youn nan dezyèm koulye a pwen sa a yon nouvo epi ou jis te fè yon konsèy la, Lè sa a, ki ta ka lakòz yo rejte sa a Guy pèdi paske pa gen nenpòt ki ap mennen nan l '. Olye de sa - Mwen pral trase sa a ankò. Eskize kapasite atistik m 'yo. Nou konnen nou pa ka jis konekte dirèkteman 2 nan youn nan nouvo. Nou dwe asire w ke nou kenbe fèm nan fè yon sèl an dènye. Ki sa nou ta ka vle fè se gen yon konsèy tanporè eleman an ki k ap pase yo dwe fen liv sou. Se konsa, Lè sa a, nou gen yon konsèy tanporè a. Depi nou konnen ke sa a se yon sèl twazyèm ke yo te kenbe tras nan, 2 kapab kounye a konekte nan yon sèl nouvo nou an. Men, si sa a nouvo wouj nèg a pwal nan ant 2 ak 3, Lè sa a, ki sa ki konsèy ke nèg la pral lonje dwèt sou? >> [Elèv] tanperatur. Tanperatur. Yeah. Se konsa, Lè sa a, pwochen valè sa a Guy wouj la a pwal tanporèr. Lè w ap mete nan lis lye, nou te wè ke nou te kapab fasil ajoute yon bagay nan fen a pa kreye yon etalaj tanporè, oswa si nou te vle ajoute yon bagay nan mitan an nan etalaj nou an, Lè sa a, li ta pran yon ti jan plis mélanger alantou. Si ou vle, pou egzanp, gen yon Ranje lis lye, Lè sa a, ou gen kalite peze depans sa yo ak benefis yo nan ki paske si ou vle gen yon etalaj Ranje, ki vle di ke chak fwa ke ou insert nan li, li pral pran yon ti jan pi plis tan. Sepandan, si ou vle pita sou, menm jan nou ap jwenn nou pral vle, rechèch atravè yon lis lye, lè sa a li ta kapab pi fasil si ou konnen ke tout bagay nan lòd. Se konsa, ou ta ka vle peze depans sa yo ak benefis yo nan sa. Yon lòt fason insert nan yon lis lye se insert nan kòmansman la anpil nan yon lis. Si nou fè desen jete lank nou yo isit la - sa a se tèt nou yo - ak Lè sa a, moun sa yo te lye nan li, ak Lè sa a, nou gen yon ne nouvo yo dwe mete nan kòmansman an, Lè sa a, sa ki ka nou vle fè? Ki sa ki ta dwe mal ak jis di mwen vle konekte wouj nan ble a, paske sa se yon sèl la an premye? Ki sa ki ta rive isit la? Tout moun sa yo twa ta jwenn pèdi. Se konsa, nou pa vle fè sa. Yon fwa ankò, nou te aprann ke nou bezwen gen kèk kalite konsèy tanporè. Se pou nou chwazi gen yon pwen tanporè nan sa a Guy. Lè sa a, nou ka gen ble yon pwen nan tanporè nan ak Lè sa a, pwen an wouj nan ble a. Rezon an pou kisa mwen sèvi ak moun isit la se paske nou reyèlman vle visualized kenbe sou moun epi asire ke nou gen yon ap mennen nan yo anvan nou kite ale nan yon lòt men oswa yon bagay tankou sa. Kounye a ke nou gen yon sans de lye lis - ki jan nou ta ka kreye yon lis lye ak kreye estrikti yo pou sa ki gen ladan definisyon an kalite pou yon ne ak Lè sa a, fè si ke nou gen yon konsèy nan tèt sa a nan lis lye - yon fwa nou gen sa ki epi nou konnen ki jan yo Traverse atravè yon etalaj, aksè nan divès eleman, nou konnen ki jan yo insert epi nou konnen ki jan yo libere yo, Lè sa a, nou ka jwenn nan Misspellings. Kòm dabitid, nou gen yon seksyon nan kesyon ki pral fè ou jwenn itilize opere avèk lis lye yo ak estrikti diferan tankou ke moun kap kriye ak pil. Lè sa a, nou ka deplase ale nan Misspellings. Misspellings gen nan kòd la distribisyon yon koup la dosye ki gen enpòtans. Premye nou remake ke nou gen sa a makfil isit la, ki nou pa t vreman rankontre anvan. Si ou gade anndan folder nan pset5, ou ta remake ke ou gen yon. H ranpli, Lè sa a, ou gen de. dosye c. Ki sa sa makfil fè, se anvan, nou ta jis tape fè ak Lè sa a, non an pwogram ak Lè sa a, nou ta renmen wè tout moun sa yo agiman ak drapo ki te pase nan du a. Ki sa ki makfil a fè, se pèmèt nou konpile dosye plizyè nan yon fwa epi pase nan drapo yo ke nou vle. Isit la nou jis wè gen yon dosye header isit la. Lè sa a, nou gen aktyèlman de dosye sous. Nou gen speller.c ak dictionary.c. Ou ap akeyi l korije makfil a si ou vle. Remake isit la si ou tape pwòp, Lè sa a, ki sa li fè se aktyèlman retire anyen ki se nwayo a. Si ou te resevwa yon fay segmentation, fondamantalman ou jwenn yon pil fatra prensipal yo. Se konsa, sa a lèd dosye ti kras ap parèt nan lis ou a rele prensipal yo. Ou pral vle retire sa a fè li netwaye. Li retire nenpòt dosye ègzekutabl ak. Dosye o. Se pou nou pran yon gade nan dictionary.h. Sa a di ke li deklare fonctionnalités yon diksyonè a. Nou gen yon longè maksimòm pou nenpòt ki pawòl nan diksyonè a. Nou di ke sa a se pral pi long nan pawòl Bondye a posib. Li nan longè 45. Se konsa, nou pa pwal gen okenn mo ki depase ki longè. Isit la nou jis gen prototip yo fonksyon. Nou pa gen aplikasyon aktyèl la paske se sa ki nou ap fè pou sa a pset. Men, sa ki sa a fè, se depi nou ap fè fas ak pi gwo dosye isit la ak fonctionnalités sou yon echèl pi gwo, li nan itil gen yon. h dosye pou ke yon lòt moun li, oswa lè l sèvi avèk kòd ou a ka konprann sa k ap pase sou. E petèt yo vle aplike eseye si ou te fè tab regle oswa vis vèrsa. Lè sa a, yo ta di fonksyon chaj m 'yo, aplikasyon aktyèl la ki pral diferan, men sa a pwototip pa pral chanje. Isit la nou te tcheke yo, ki retounen vre si yon mo bay pou sa se nan diksyonè a. Lè sa a, nou gen chaj, ki fondamantalman pran nan yon dosye diksyonè ak Lè sa a, charj l 'nan kèk estrikti done. Nou gen gwosè, ki, lè yo rele, retounen gwosè a nan diksyonè ou a, konbyen mo yo estoke nan li, ak Lè sa a, debake, ki libere moute tout memwa ke ou ka yo te pran moute pandan y ap fè diksyonè ou a. Se pou nou pran yon gade nan dictionary.c. Nou wè ke li sanble anpil menm jan ak dictionary.h, eksepte kounye a li jis gen tout moun sa yo todo nan li. Se konsa, ki se travay ou. Evantyèlman, ou pral ranpli speller.c ak tout bagay sa yo kòd. Dictionary.c, lè kouri, se pa sa reyèlman ale nan fè anyen, pou nou gade nan direksyon pou speller.c wè aplikasyon aktyèl la nan yon korektè a. Menm si ou pa ap pral koreksyon nenpòt nan sa a kòd, li enpòtan yo li, konprann lè se chay rele, lè m 'rele chèk, jis yo konprann, kat li soti, wè ki jan fonksyon an ap travay. Nou wè ke li nan tcheke pou itilizasyon ki kòrèk la. Esansyèlman, lè yon moun kouri ortograf, sa a endike ke li la si ou vle pou yo pou pase nan yon dosye diksyonè paske gen k ap pase yo dwe yon dosye diksyonè default. Lè sa a, yo gen yo pase nan tèks la yo dwe période-w tcheke yo. kontra rusage ak tan paske yon pati nan sa a pset ki nou pral fè fas avèk pita se pa sèlman jwenn yon fonksyone période-korektè k ap travay men aktyèlman ap resevwa li nan dwe vit. Se konsa, Lè sa a, ki nan kote rusage ki pral vin pous Isit la, nou wè rele an premye nan youn nan dosye dictionary.c nou an, ki se chay. Chaj retounen vre oubyen fo - vre sou siksè, fo sou echèk. Se konsa, si diksyonè a pa chaje byen, Lè sa a, speller.c a pral retounen 1 ak kite fimen. Men, si li fè sa chaj byen, Lè sa a, li la pral kontinye. Nou kontinye, epi nou wè kèk dosye mwen / O isit la, ki kote l ye pwal yo dwe ki gen rapò ak ouvèti dosye a tèks. Isit la, ki sa sa a fè, se période-tcheke tout pawòl sèl ki nan tèks la. Se konsa, sa speller.c ap fè dwa isit la se iteration sou chak nan mo sa yo nan dosye a tèks ak Lè sa a, tcheke yo nan diksyonè a. Isit la, nou gen yon Boolean mal ekri ki pral wè si chèk retounen vre oswa ou pa. Si mo a se aktyèlman nan diksyonè a, Lè sa a, chèk ap retounen vre. Sa vle di ke pawòl Bondye a se pa sa mal ekri. Se konsa, mal ekri ta dwe fo, ak sa a, se rezon sa a genyen bang lan gen, endikasyon ki la. Nou kenbe sou prale a, ak Lè sa a, li kenbe tras nan konbyen mo ki mal ekri gen nan dosye a. Li kontinye sou yo ak sou fèmen dosye a. Lè sa a, isit la, li rapòte konbyen mo ki mal ekri ou te fè. Li kalkile konbyen tan li te pran chaj diksyonè a, konbyen tan li te pran yo tcheke li, konbyen tan li te pran kalkile gwosè a, ki, kòm n ap ale sou li a, yo ta dwe piti anpil, ak Lè sa a, konbyen tan li te pran debake diksyonè a. Isit la moute pi wo a nou wè apèl la ap desann isit la. Si nou tcheke pou gwosè isit la, Lè sa a, nou wè ke isit la se apèl la nan gwosè kote li detèmine gwosè a nan diksyonè a. Awesome. Travay nou an pou sa a pset se aplike chaj, ki pral chaje diksyonè a done estrikti - kèlkeswa sa ki ou chwazi pou ou, se pou li yon tab regle oswa yon eseye - avèk mo soti nan dosye a diksyonè. Lè sa a, ou gen gwosè, ki pral retounen kantite mo nan diksyonè a. Men, si ou aplike chaj nan yon fason entelijan, Lè sa a, gwosè yo ta dwe trè fasil. Lè sa a, ou te tcheke yo, ki pral tcheke pou wè si yon mo bay pou sa se nan diksyonè a. Se konsa, speller.c pase nan yon fisèl, ak Lè sa a, ou gen yo tcheke si wi ou non ke fisèl ki genyen nan diksyonè ou a. Remake ke nou jeneralman gen diksyonè estanda, men nan sa a pset, fondamantalman nenpòt diksyonè ki te pase nan nan nenpòt lang. Se konsa, nou pa ka jis asime ke pawòl Bondye a se ki andedan li. Te kapab foutbar nan mo dwe defini nan yon diksyonè sèten ke nou pase pous Lè sa a, nou te debake, ki libere diksyonè a nan memwa a. Premyèman, mwen ta renmen ale sou metòd la tab regle sou ki jan nou ta ka aplike nan tout kat moun ki fonksyon, ak Lè sa a, mwen pral ale sou ap eseye nan metòd, ki jan nou aplike sa yo fonksyon kat, ak nan pale la fen sou kèk konsèy jeneral lè w ap fè pset la epi tou li ki jan ou ka kapab itilize Valgrind yo tcheke pou fwit memwa. Se pou nou jwenn nan metòd la tab regle. Yon tab regle konsiste de yon lis bokit. Chak valè, chak mo, ki pral antre nan youn nan sa yo bokit. Yon tab regle depreferans respire distribye tout moun sa yo valè ke w ap pase nan ak Lè sa a, ranpli yo nan bokit la tankou ke chak bokit gen sou yon kantite egal valè nan li. Estrikti a pou yon tab regle, nou gen yon etalaj de lye lis. Ki sa nou fè se lè nou pase nan yon valè, nou tcheke kote ki valè yo ta dwe fè pati, ki bokit li fè pati nan, ak Lè sa a, mete l 'nan lis la lye ki asosye avèk bokit. Isit la, sa m 'genyen se yon fonksyon regle. Se yon tab int regle. Se konsa, pou bokit la an premye, nenpòt nonm antye relatif ki anba a 10 ale nan bokit la an premye. Nenpòt nonm antye relatif pi wo a 10 Men, pi ba a 20 ale nan dezyèm lan, ak Lè sa a, sou sa ak pou fè. Pou m ', chak bokit ap reprezante nimewo sa yo. Sepandan, di m 'te pase nan 50, pou egzanp. Li parèt kòm si twa nan premye gen yon ran de dis chif yo. Men, mwen vle yo ki pèmèt tab regle mwen an pran nan nenpòt ki sòt de nonm antye yo, se konsa Lè sa a, mwen ta gen yo met deyò ansyen lwil tout nimewo pi wo a 30 nan bokit an dènye. Se konsa, Lè sa a, ki ta lakòz yon kalite tab dezekilib regle. Repete, yon tab regle se jis yon etalaj de bokit kote chak bokit la se yon lis lye. Se konsa, detèmine kote chak valè ale, ki bokit li ale nan, w ap ale nan vle sa ki rele yon fonksyon regle ki pran yon valè ak Lè sa a, di sa a valè koresponn ak yon bokit a sèten. Se konsa, moute anwo a nan egzanp sa a, fonksyon regle m 'te pran chak valè. Li tcheke si li te mwens pase 10. Si li te, li ta mete l 'nan bokit la an premye. Li tcheke si li nan mwens pase 20, mete l 'nan dezyèm lan si se laverite, chèk si li nan mwens pase 30, ak Lè sa a, mete l 'nan bokit la twazyèm, ak Lè sa a, tout lòt moun jis tonbe sou bokit nan katriyèm. Se konsa, chak fwa ou gen yon valè, fonksyon regle ou pral mete ke valè nan bokit la ki apwopriye yo. Fonksyon an regle fondamantalman bezwen konnen konbyen bokit ou genyen. Gwosè regle tablo ou a, ki kantite bokit ou genyen, ki nan ale nan yon nimewo fiks ki se jiska ou, pou ou pou w deside, Men, li la pral gen yon nimewo fiks yo. Se konsa, fonksyon regle ou ap repoze sou ke yo detèmine ki bokit chak kle ale nan tankou ke li nan respire distribiye. Menm jan ak aplikasyon nou an lye lis, kounye a chak ne nan tablo a regle se aktyèlman pral gen yon Char kalite. Se konsa, nou gen yon etalaj Char rele mo ak Lè sa a, yon lòt konsèy ne nan pwochen, ki fè sans paske li k ap pase yo dwe yon lis lye. Sonje lè nou te lye lis, mwen te fè yon * ne rele tèt ki te lonje dwèt ne nan premye nan lis la lye. Men, pou regle tab nou an, paske nou gen plizyè lye lis, ki sa nou vle se nou vle tab regle nou yo kapab tankou, "Ki sa ki se yon bokit?" Yon bokit se jis yon lis endikasyon ne, e konsa chak eleman nan bokit la se aktyèlman montre nan lis korespondan li yo lye. Pou tounen nan sa a chematikman, ou wè sa a bokit yo tèt yo yo se flèch yo, pa nœuds vrè. Youn nan pwopriyete esansyèl nan fonksyon regle se yo ke yo ap detèrminist. Sa vle di ke nenpòt lè ou regle nimewo 2 a, li ta dwe toujou retounen bokit la menm. Chak valè sèl ki ale nan fonksyon an regle, si repete, gen yo ka resevwa endèks la menm. Se konsa, fonksyon regle ou retounen endèks la nan etalaj la kote ki valè ki dwe. Kòm mwen mansyone anvan, se ki kantite bokit fiks, e konsa endèks ou ke ou retounen gen li dwe mwens pase ki kantite bokit men pi gran pase 0. Rezon an pou kisa nou gen fonksyon regle olye pou yo jis yon sèl lis sèl lye oswa yon sèl etalaj yon sèl se ke nou vle pou kapab Ale nan yon seksyon sèten pi fasil si nou konnen karakteristik la nan yon valè - olye pou yo gen nan rechèch atravè diksyonè a tout antye antye, ke yo te kapab Ale nan yon seksyon sèten nan li. Fonksyon regle ou a ta dwe pran an kont ki depreferans, chak bokit gen anviwon menm kantite kle. Depi tab la regle se yon seri de lye lis, Lè sa a, bay lis ki ki te lye tèt yo yo ale nan gen plis pase yon ne. Nan egzanp lan anvan, de nonb diferan, menm si yo pa t 'egal, lè ache, ta retounen endèks la menm. Se konsa, lè ou ap fè fas ak mo yo, yon mo lè ache ta dwe menm valè a regle kòm yon lòt mo. Sa a ki sa nou rele yon kolizyon, lè nou gen yon ne ki, lè yo ache, lis la lye nan ki bokit se pa vid. Teknik sa yo ke nou rele gen lineyè sonde, ki kote ou ale nan lis la lye ak Lè sa a, jwenn kote ou vle insert ki ne paske ou gen yon kolizyon. Ou ka wè ke gen ta kapab yon komès-off isit la, dwa? Si ou gen yon tab ki piti anpil regle, yon ti kantite bokit, Lè sa a, w ap ale nan gen yon anpil nan kolizyon. Men, Lè sa a, si ou fè yon tablo gwo anpil regle, w ap pwobableman pral pou misyon pou minimize kolizyon yo, Men, li la pral gen yon gwo anpil done estrikti. Gen k ap pase yo dwe dezavantaj ki genyen nan sa. Se konsa, lè w ap fè pset ou a, eseye yo jwe nan ant petèt fè yon pi piti tab regle men Lè sa a, konnen ke li la pral pran yon ti jan pi long Traverse eleman yo diferan nan tout sa yo bay lis lye. Ki sa ki chaj ki pral fè se repekte sou tout mo nan diksyonè a. Li pase nan yon konsèy nan dosye a diksyonè. Se konsa, w ap ale nan pran avantaj de dosye a mwen / O fonksyon ke ou metrize nan pset4 ak repekte sou tout mo nan diksyonè a. Ou vle tout pawòl nan diksyonè a ou kapab vin yon ne nouvo, ak w ap ale nan mete chak youn nan moun ki nœuds andedan nan estrikti done diksyonè ou a. Chak fwa ou jwenn yon nouvo mo, ou konnen li pral vin yon ne. Se konsa, ou ka ale imedyatman ak malok yon konsèy ne pou chak nouvo mo ke w genyen. Isit la m ap rele new_node ne konsèy m 'ak mwen mallocing ki sa? Gwosè a nan yon ne. Lè sa a, li fisèl la aktyèl ki sòti nan yon dosye a, paske diksyonè a aktyèlman estoke pa yon mo ak Lè sa a, yon liy nouvo, ki sa nou ka pran avantaj de se fskanf fonksyon an, kote dosye a se dosye a diksyonè ke nou ap pase nan, se konsa li analysis dosye a pou yon kòd li ansanm ak kote ki fisèl nan agiman an dènye. Si ou sonje tounen nan youn nan konferans yo, lè nou te ale sou ak kalite kale kouch yo sou do yo nan bibliyotèk la CS50, nou te wè yon aplikasyon de fskanf la. Pou tounen nan fskanf, nou gen dosye a ke nou ap li soti, nou ap chèche pou yon fisèl nan ki ranpli, ak Lè sa a, nou ap mete li nan isit la mwen gen new_node-> mo paske new_node se yon konsèy ne, pa yon ne vrè. Se konsa, Lè sa a, m ap di new_node, mwen vle pou yo ale nan ne an ke li nan montre ak Lè sa a, bay ki valè nan mo. Nou vle Lè sa a, pran mo sa a epi antre li nan tablo a regle. Reyalize ke nou te fè new_node yon konsèy ne paske nou ap ale nan vle konnen ki sa adrès sa a nan ne se lè nou insert l 'nan paske estrikti a nan nœuds yo tèt yo, nan struct a, se yo ke yo gen yon konsèy nan yon ne nouvo. Se konsa, Lè sa a, sa ki nan adrès sa a nan ne ale nan lonje dwèt sou? Sa adrès a pwal new_node. ki fè sans, poukisa nou ap fè new_node yon * ne tankou yo te opoze a yon ne? Oke. Nou gen yon mo. Sa valè se new_node-> mo. Ki gen pawòl Bondye a soti nan diksyonè a ke nou vle opinyon. Se konsa, sa nou vle fè se nou vle rele fonksyon regle nou sou sa fisèl paske fonksyon regle nou an pran nan yon fisèl ak Lè sa a, retounen nou yon nonb antye relatif, kote ki nonb antye relatif se endèks la kote hashtable nan ki endèks reprezante ki bokit. Nou vle pran ki endèks ak Lè sa a, ale nan ki endèks nan tablo a regle ak Lè sa a, sèvi ak ke lis lye nan insert ne la nan new_node. Sonje ke sepandan ou deside insert ne ou a, si li nan nan mitan an si ou vle sòt li oswa nan kòmansman an oswa nan fen a, jis asire w ke ne dènye fwa ou te toujou pwen nil paske sa se yon fason a sèlman ke nou konnen ki kote eleman nan dènye lye lis nou an se. Si gwosè se yon nonb antye ki reprezante ki kantite mo nan yon diksyonè, diksyonè Lè sa a, yon fason fè sa a se ke chak fwa gwosè a rele nou ale nan chak eleman nan tablo regle nou ak Lè sa a, repekte nan chak lis lye nan tab la regle ak Lè sa a, kalkile longè a de sa, ogmante 1 kontwa nou yo nan 1. Men, chak fwa ke gwosè yo rele, ki nan pral pran yon bon bout tan paske nou pral yo dwe linear sonde chak sèl lis lye. Olye de sa, li la pral gen yon anpil pi fasil si w kenbe tras nan konbyen mo yo pase pous Se konsa, Lè sa a, si ou genyen ladan yo yon kontwa nan fonksyon chaj ou ki dènye enfòmasyon jan sa nesesè, Lè sa a, san preskripsyon, si ou mete l 'nan yon varyab mondyal, yo pral kapab jwenn aksè nan gwosè. Se konsa, sa gwosè ta ka tou senpleman fè se nan yon sèl liy, jis retounen valè a vann san preskripsyon, gwosè a nan diksyonè a, ki ou deja te fè fas ak nan chaj. Sa a ki sa mwen vle di ke lè m 'te di si ou aplike chaj nan yon fason itil, Lè sa a, gwosè a pwal trè fasil. Se konsa, kounye a nou jwenn yo tcheke. Koulye a, nou ap fè fas ak pawòl soti nan dosye a tèks opinyon, epi pou nou ap pral tcheke si tout moun ki mo D ' yo aktyèlman nan diksyonè a oswa ou pa. Menm jan ak Goumen, nou vle pèmèt pou ensansibilite ka. Ou vle asire w ke tout mo yo ki te pase nan, menm si yo ap melanje ka, lè yo rele ak compare fisèl, se ekivalan. Mo yo nan dosye yo tèks diksyonè yo aktyèlman tout miniskil. Yon lòt bagay se ke ou ka asime ke tout pawòl ki te pase nan, chak fisèl, a pwal swa alfabetik oswa gen apostrof. Apostrof pwal gen mo ki valab nan diksyonè nou an. Se konsa, si ou gen yon mo ak apostwòf S, sa se yon mo reyèl lejitim nan diksyonè ou ki k ap pase yo dwe youn nan nœuds ki nan tablo regle ou. Tcheke opere ak si mo a ki egziste, Lè sa a, li la leve yo dwe nan tablo regle nou an. Si mo a se nan diksyonè a, Lè sa a, tout mo yo nan diksyonè a se nan tablo a regle, kidonk kite a gade pou mo sa a nan tablo a regle. Nou konnen ke depi nou aplike fonksyon regle nou sa yo ki se tout pawòl inik toujou ache menm valè a, Lè sa a, nou konnen ke olye pou yo chèche nan tab antye nou an tout antye regle, nou ka aktyèlman jwenn lis ki ki te lye ke mo sa a ta dwe apatni a. Si li te nan diksyonè a, Lè sa a, li ta nan ki bokit. Ki sa nou ka fè, si mo se non an nan fisèl nou te pase nan, nou kapab jis regle mo sa a ak gade nan lis la lye nan valè a nan hashtable [regle (mo)]. Soti nan la, sa nou kapab fè se nou gen yon sou pi piti nan nœuds pou fè rechèch pou mo sa a, ak pou nou ka Traverse lis la lye, lè l sèvi avèk yon egzanp soti nan pi bonè nan solisyon an, ak Lè sa a, rele fisèl konpare sou pawòl Bondye a tout kote kurseur a ap lonje dwèt a, mo sa a, ak wè si sa yo konpare. Tou depan de sou wout la ke ou òganize fonksyon regle ou a, si li nan Ranje, ou ka kapab retounen fo yon ti jan pi bonè, Men, si li nan klase, lè sa a ou vle kontinye travèse nan lye lis ou a jiskaske ou jwenn eleman ki sot pase yo nan lis la. Men, si ou toujou pa te jwenn mo a pa lè ou te rive nan nan fen lis la lye, sa vle di mo sa a ou a pa egziste nan diksyonè a, ak konsa pou pawòl se valab, ak chèk yo ta dwe retounen fo. Koulye a, nou vini nan debake, kote nou vle libere tout nœuds yo ke nou te malloc'd, Se konsa gratis nan tout nœuds yo andedan nan tablo regle nou an. Nou pwal vle repekte sou tout nan lis ki ki te lye ak gratis nan tout nœuds yo nan sa. Si ou gade pi wo a nan solisyon an egzanp lan kote nou libere yon lis lye, Lè sa a, ou pral vle repete pwosesis sa a pou chak eleman nan tablo a regle. Apre sa, m'a ale sou sa a rive sou fen solisyon an, men Valgrind se yon zouti kote ou ka wè si ou te byen libere chak ne ke ou te malloc'd oswa tout lòt bagay ke ou te malloc'd, nenpòt konsèy lòt. Se konsa, sa a, se tab regle, kote nou gen yon nimewo fini nan bokit ak yon fonksyon regle ki pral pran yon valè ak Lè sa a, bay ki valè nan yon bokit a sèten. Koulye a, nou vini nan ap eseye. Ap eseye kalite gade tankou sa a, epi mwen pral tou trase soti yon egzanp. Fondamantalman, ou gen yon etalaj antye nan lèt potansyèl, ak Lè sa a, chak fwa w ap konstwi yon mo, ka lèt sa a dwe lye pou yon diksyonè nan yon ranje lajè nan posibilite yo. Kèk mo kòmanse ak C men Lè sa a, kontinye ak A, men lòt moun kontinye ak O, pou egzanp. Yon trye se yon fason pou vizualizan tout konbinezon ki posib pou mo sa yo. Yon trye ki pral kenbe tras nan sekans nan lèt ki genyen mo, branch la lè sa nesesè, lè yon moun ka lèt dwe swiv pa yon miltip nan lèt, ak nan fen a endike nan chak pwen si mo sa a se valid oswa ou pa paske si w ap òtograf MAT nan mo, MA mwen pa panse ke se yon mo ki valab, men MAT se. Se konsa, nan trye ou, li ta kapab endike ke apre MAT sa a, se aktyèlman yon mo ki valab. Chak ne nan trye nou an, ap aktyèlman ale nan genyen yon etalaj de pwent ne, e nou pral genyen, espesyalman, 27 nan moun ki endikasyon ne, yonn pou chak lèt ​​nou ekri nan alfabè a kòm byen ke pèsonaj la apostwòf. Chak eleman nan ki etalaj la tèt li ale nan pwen a yon lòt ne. Se konsa, si sa ne se nil, si pa gen anyen apre sa, Lè sa a, nou konnen ke gen nan pa gen lèt pli lwen nan ki sekans mo. Men, si ke ne se pa nil, sa vle di ke gen plis lèt nan ki sekans lèt. Lè sa a, Anplis de sa, chak ne endike si li nan karaktè an dènye nan yon mo oswa ou pa. Ann al nan yon egzanp yon trye. Premye fwa mwen gen plas pou 27 nœuds nan sa a etalaj. Si mwen gen BAR nan mo - Si mwen gen BAR nan mo yo epi mwen vle insert ki nan, lèt la premye se B, kidonk si trye mwen, se yon vid, B se dezyèm lèt la nan alfabè a, se konsa mwen pral chwazi pou mete sa a isit la nan sa a endèks. Mwen pral gen B isit la. B a pwal yon ne ki pwen a yon lòt etalaj nan tout karaktè yo posib ki ka swiv apre lèt la B. Nan ka sa a, mwen fè fas ak ba a mo, Se konsa, yon pral ale isit la. Apre yon, mwen gen lèt R la, se konsa Lè sa a, Yon pwen kounye a nan konbinezon pwòp li yo, ak Lè sa a, R pral isit la. BAR se yon mo fin ranpli, kididonk Lè sa a, mwen pral gen R pwen a yon lòt ne ki di ke mo sa a se valid. Sa ne se tou pral gen yon etalaj la nœuds, men sa yo ta kapab nil. Men, fondamantalman, li kapab kontinye tankou sa. Sa ap vin yon ti jan pi plis ki klè lè nou ale nan yon egzanp diferan, Se konsa, jis pote ansanm avè m 'lan. Koulye a, nou gen BAR andedan nan diksyonè nou an. Koulye a, di nou gen Baz la mo. Nou kòmanse avèk B, ak nou deja genyen B kòm youn nan lèt yo ki nan nan diksyonè nou an. Sa ki swiv ak A. Nou gen yon deja. Men, Lè sa a, olye de sa, nou gen Z yo. Se konsa, Lè sa a, yon eleman nan etalaj nou a pwal Z, e konsa Lè sa a, ki yon sèl ki pral nan pwen a yon lòt fen valab nan mo a. Se konsa, nou wè ke lè nou kontinye nan B ak Lè sa a, A, gen de chwa diferan kounye a nan diksyonè nou an pou mo ki kòmanse ak B ak A. Di nou te vle insert foutbar an mo. Lè sa a, nou ta fè yon antre nan F. F se yon ne ki pwen nan yon etalaj antye. Nou ta jwenn O, ale nan O, O Lè sa a, lyen ki mennen nan yon lis tout antye. Nou ta gen B ak Lè sa a, kontinye, nou ta gen A ak Lè sa a, R. Se konsa, Lè sa a, travèrs foutbar tout wout la desann jouk foutbar se yon mo kòrèk. Se konsa, Lè sa a, sa a ta ka di yon mo ki valab. Koulye a, di mo pwochen nou yo nan diksyonè a se aktyèlman foo an mo. Nou ta di F. Sa ki swiv F? Mwen aktyèlman deja gen yon espas pou O, se konsa mwen pral kontinye. Mwen pa bezwen fè yon sèl nouvo. Kontinye. Foo se yon mo ki valab nan sa a diksyonè, se konsa Lè sa a, mwen pral endike ki se sa ki valid. Si m 'sispann sekans mwen la, ki ta ka kòrèk. Men, si nou kontinye sekans nou yo soti nan foo desann nan B ak jis te gen FOOB, FOOB se pa yon mo, ak ki pa nan endike kòm yon yon sèl ki valid. Nan yon trye, ou te tout ne endike si li nan yon mo ki valab oswa ou pa, ak Lè sa a, chak ne tou te gen yon seri 27 endikasyon ne ki Lè sa a, pwen nan nœuds tèt yo. Isit la se yon fason pou ki jan ou ta ka vle defini sa a. Sepandan, jis tankou nan egzanp lan tab regle, kote nou te gen yon tèt * ne pou montre pou nan konmansman an nan lye lis nou an, n ap tou ale nan vle kèk jan pou konnen ki kote nan konmansman an nan trye nou an se. Gen kèk rele moun ap eseye pyebwa, ak ki nan kote rasin soti nan. Se konsa, nou vle rasin pou pyebwa nou yo asire w ke nou rete chita tout kote trye nou an se. Nou deja kalite janbe wout la ou ta ka panse osijè de loading chak mo nan diksyonè a. Esansyèlman, pou tout pawòl w ap ale nan vle repekte nan trye ou ak konnen ke chak eleman nan timoun yo - nou te rele li timoun nan ka sa a - koresponn ak yon lèt diferan, w ap ale nan vle tcheke valè sa yo nan ki endèks patikilye ki koresponn ak lèt ​​la. Se konsa, panse tout wout la tounen nan Seza tande kòz ak Vigenere, konnen ke chak lèt ​​nou ekri ou kapab kalite kat jeyografik tounen nan yon endèks alfabetik, definitivman A jiska Z a pwal trè fasil a kat nan yon lèt alfabetik, men malerezman, apostrof yo se tou yon karaktè akseptab nan mo yo. Mwen pa menm asire ki sa valè a ASCII se, konsa pou ke si ou vle jwenn yon endèks deside si ou vle li nan dwe youn nan premye oswa yon sèl nan sot pase yo, ou pral oblije fè yon difisil chèk kode pou sa ak Lè sa a, mete sa nan, 26 endèks pou egzanp. Se konsa, Lè sa a, w ap tcheke valè a nan timoun yo [mwen] kote [mwen] koresponn ak tou sa lèt ou nan. Si sa a, se nil, sa vle di ke pa genyen yon kounye a nenpòt lèt posib isu de ki sekans anvan, se konsa w ap ale nan vle malok epi fè yon ne ak nouvo gen ke timoun yo [mwen] pwen nan li pou ke ou kreye - lè nou antre yon lèt nan rektang lan - fè timoun yo ki pa nil epi pwen nan ki ne nouvo. Men, si sa se pa nil, renmen nan egzanp nou an foo lè nou te deja gen foutbar, nou ap kontinye, epi nou pa se tout tan fè yon ne nouvo men pito jis mete is_word vre nan fen mo sa a. Se konsa, Lè sa a, tankou anvan, paske isit la w ap fè fas ak chak lèt ​​nou ekri nan yon tan, li pral pi fasil pou ou pou gwosè, olye pou yo gen kalkile epi ale nan pye bwa an antye ak kalkile konbyen timoun mwen gen ak Lè sa a, branch koupe, sonje ki jan anpil nan yo ki sou bò gòch ak sou bò dwat la ak bagay sa yo tankou sa, li la pral gen yon anpil pi fasil pou ou si ou jis kenbe tras nan konbyen mo w ap ajoute nan lè w ap fè fas ak chaj. Se konsa, Lè sa a, ki gwosè fason ka jis retounen yon varyab mondyal de gwosè. Koulye a, nou vin jwenn chèk la. Estanda menm jan anvan, kote nou vle pèmèt pou ensansibilite ka. Osi byen, nou asime ke strings yo yo, se sèlman alfabetik karaktè oswa apostrof yo paske timoun se yon etalaj de 27 tan, se konsa tout lèt yo nan alfabè an plis apostwòf la. Pou tcheke sa ki ou pral vle fè se ou pral vle kòmanse nan rasin lan paske rasin lan ap lonje dwèt sou yon etalaj ki gen tout lèt yo posib kòmanse nan yon mo. W ap ale nan kòmanse a, ak Lè sa a, w ap ale nan tcheke sa a nil valè oswa ou pa, paske si valè a se nil, ki vle di ke diksyonè a pa gen okenn valè ki gen lèt sa a nan ki lòd patikilye. Si nil li a, Lè sa a, ki vle di ke pawòl la se mal ekri touswit. Men, si li pa nil, lè sa a ou ka kontinye, di ke lèt premye se yon lèt posib an premye nan yon mo, Se konsa koulye a, mwen vle tcheke si lèt, dezyèm lan, ki sekans, se nan diksyonè m 'yo. Se konsa, w ap ale pou yo ale nan endèks la nan timoun yo nan ne an premye ak tcheke si lèt sa a dezyèm egziste. Lè sa a, ou repete pwosesis sa a yo tcheke si wi ou non ke sekans a valab oswa pa nan trye ou a. Chak fwa timoun yo ne nan ki pwen endèks nil, ou konnen ke ke sekans pa egziste, men Lè sa a, si ou rive nan fen ki gen mo a ke ou te antre, Lè sa a, ou vle tcheke kounye a ke mwen te fin ranpli sa a sekans epi li te jwenn li nan trye m 'yo, se mo sa a valab oswa ou pa? Se konsa, lè sa a ou vle tcheke sa, epi ki nan lè si ou te jwenn ke sekans, Lè sa a, ou vle tcheke si mo sa a se valid oswa ou pa paske sonje tounen nan ka a anvan ke mwen te trase ki kote nou te gen FOOB, sa ki te yon sekans ki valab ke nou te jwenn, men pa t yon vrè mo ki valab tèt li. Menm jan tou, pou debake nan ap eseye sa yo ou vle debake tout nœuds yo ki nan trye ou a. Sorry. Menm jan ak tab yo regle kote nan debake nou libere tout nœuds yo, nan ap eseye sa yo nou vle tou libere tout nœuds yo. Debake pral aktyèlman ap travay pi fasil anba nan fon nan tèt paske sa yo, se esansyèlman lye lis. Se konsa, nou vle asire ke nou kenbe fèm nan fè tout valè yo a ak gratis tout nan yo klèman. Ki sa ki w ap ale nan vle fè si w ap travay ak yon trye se pou vwayaje pou ale anba a ak gratis ne ki pi ba posib premye ak Lè sa a, moute al tout moun ki timoun yo ak Lè sa a, gratis tout moun sa yo, ale leve, li Lè sa a, gratis, elatriye Kalite tankou fè fas ak kouch nan anba nan trye premye a ak Lè sa a, moute tèt yon fwa ou te libere tout bagay. Sa a se yon bon ekzanp de kote repetitif fonksyon ta ka vini an sou la men. Yon fwa ou te libere kouch nan anba nan trye ou a, Lè sa a, ou rele debake sou rès la nan li, fè asire w ke ou libere chak mini - Ou ka kalite visualized li kòm ap eseye mini. Se konsa, ou gen rasin ou isit la. Mwen jis senplifye li Se konsa, mwen pa gen fè desen 26 nan yo. Se konsa, ou gen sa yo, li Lè sa a, sa yo reprezante sekans nan mo kote tout moun sa yo ti sèk ti kras yo se lèt ki sekans ki valab lèt yo. Se pou nou kontinye jis yon ti jan pi plis. Ki sa ki w ap ale nan vle fè se gratis anba a isit la ak Lè sa a, gratis yon sèl sa a ak Lè sa a, gratis yon sèl sa a nan pati anba a anvan ou libere yon sèl nan tèt moute isit la paske si w gratis yon bagay nan nivo nan dezyèm isit la, Lè sa a, ou aktyèlman ta pèdi sa a valè isit la. Se poutèt sa li enpòtan nan debake pou yon trye a asire w ke ou libere anba a an premye. Ki sa ki ou ta ka vle fè se di pou chak ne Mwen vle debake tout timoun yo. Kounye a ke nou te fin janbe debake pou metòd la tab regle kòm byen ke metòd la trye, nou pral vle gade nan Valgrind. Valgrind ou kouri ak kòmandman sa yo. Ou gen valgrind-V. W ap tcheke pou tout fwit lè ou kouri ortograf bay tèks sa a sèten paske ortograf bezwen pran nan yon dosye tèks. Se konsa, Valgrind pral kouri pwogram ou an, di ou kouman anpil bytes ou resevwa lajan, konbyen bytes ou libere, epi li pral di ou si ou libere jis ase oswa si ou pa t 'gratis ase, oswa pafwa ou ka menm sou-gratis, tankou ne gratis yon ki nan yo te deja te libere ak se konsa li ap retounen ou erè. Si ou itilize Valgrind, li pral ba ou kèk mesaj endike si ou te libere swa mwens pase ase, jis ase, oswa plis pase fwa ase. Yon pati nan sa a pset, li la si ou vle bay defi Konsèy Administrasyon Big. Men, lè nou ap fè fas ak sa yo estrikti done li nan kalite plezi yo wè ki jan byen vit ak ki jan efikas estrikti done ou te kapab. Èske rezilta fonksyon regle ou a nan yon anpil nan kolizyon? Oswa se gwosè done ou reyèlman gwo? li pran yon anpil nan tan yo Traverse? Nan boutèy la, ortograf, li sorti konbyen tan ou sèvi ak chaj, yo tcheke, fè gwosè, ak debake, ak sa moun yo afiche nan Komisyon Konsèy la Big, ki kote ou ka konpetisyon kont lòt elèv nan klas ou a ak kèk manm pèsonèl la yo wè moun ki gen pi rapid période-korektè a. Youn nan bagay ki mwen ta renmen note sou tab yo regle se ke gen kèk trè senp fonksyon regle ke nou te ka panse a. Pou egzanp, ou gen 26 bokit yo, ak konsa chak bokit koresponn ak lèt ​​la an premye nan yon mo, men sa a pral rezilta nan yon tab bèl dezekilib regle paske gen yon lot mwens mo ki kòmanse ak X pase kòmanse avèk M, pou egzanp. Youn nan fason yo ale sou ortograf se si ou vle jwenn tout nan fonctionnalités a lòt desann, Lè sa a, jis itilize yon senp fonksyon regle pou kapab jwenn kòd ou a kouri ak Lè sa a, tounen ladan l epi chanje gwosè a nan tab regle ou ak definisyon an. Gen yon anpil nan resous sou entènèt la pou fonksyon regle, epi konsa pou sa a pset yo ka pèmèt ou fè rechèch sou fonksyon regle sou entènèt la pou kèk sijesyon ak enspirasyon osi lontan ke ou asire w ke w site kote ou te resevwa li nan men. Ou se Byenveni nan gade ak entèprete kèk fonksyon regle ke ou jwenn sou entènèt la. Retounen nan sa, ou ka kapab wè si yon moun te itilize yon trye si aplikasyon yo se pi vit pase tab regle ou oswa ou pa. Ou ka soumèt bay Komisyon Konsèy la Big plizyè fwa. Li pral anrejistre antre ki pi resan ou a. Se konsa, petèt ou chanje fonksyon regle ou ak Lè sa a, reyalize ke li la aktyèlman yon anpil pi vit oswa yon anpil pi dousman pase anvan. Sa a se yon ti jan nan yon fason amizan. Genyen toujou 1 oswa 2 anplwaye ki eseye fè diksyonè a plus sa posib, pou ki nan toujou plezi gade. L 'a pou pset a se ou kouri ortograf ak yon diksyonè si ou vle ak Lè sa a, yon dosye tèks obligatwa. Pa default lè ou kouri ortograf ak jis yon dosye tèks yo epi pa presize yon diksyonè, diksyonè li pral sèvi ak dosye a tèks diksyonè, yon sèl nan gwo nan dosye a cs50/pset5/dictionaries. Ke youn gen plis pase 100,000 mo yo. Yo menm tou yo gen yon diksyonè ti ki te gen konsiderabman mwens mo ki CS50 te fè pou ou. Sepandan, ou ka trè fasil jis fè diksyonè pwòp ou a si ou jis vle yo k ap travay nan egzanp ti - pou egzanp, si ou vle itilize gdb epi ou konnen valè yo espesifik ke ou vle tab regle ou a kat soti nan. Se konsa, ou jis ka fè dosye pwòp tèks ou jis ak BAR, Baz, foo, ak foutbar, fè sa nan yon dosye tèks, separe sa yo chak avèk 1 liy, ak Lè sa a, fè dosye pwòp tèks ou ki literalman sèlman gen petèt 1 oswa 2 mo pou ke ou konnen ekzakteman ki sa pwodiksyon an ta dwe. Gen kèk nan dosye yo tèks echantiyon ki Komisyon Konsèy la Big lè ou kouri defi pral tcheke pou wè yo se Gè ak Lapè ak yon Jane roman Austen oswa yon bagay tankou sa. Se konsa, lè w ap kòmanse soti, li nan yon anpil pi fasil yo fè dosye pwòp tèks ou ki gen sèlman yon koup nan mo oswa petèt 10 pou ke ou ka predi kisa ki rezilta a yo ta dwe ak Lè sa a, tcheke li kont ke, se konsa plis nan yon egzanp kontwole. Se konsa, depi nou ap fè fas ak predi ak desen bagay alantou li, ankò mwen vle pou ankouraje w sèvi ak plim ak papye paske li nan reyèlman ale nan ede ou avèk yon sèl sa a - desen flèch yo, ki jan tab la regle oswa ki jan trye ou sanble, lè w ap libere yon bagay kote flèch yo prale a, ou menm ki kenbe sou ase, ou wè nenpòt lyen toudènyeman ak tonbe nan gwo twou san fon an nan fwit memwa. Se konsa, tanpri, tanpri eseye trase bagay sa yo deyò anvan menm ou jwenn yo ekri kòd desann. Trase bagay sa yo deyò pou ke ou konprann ki jan bagay yo ap mache nan travay paske lè sa a mwen garanti ou pral kouri antre nan mwens muddles konsèy la. Tout dwa. Mwen vle swete w anpil pi bon an nan chans ak sa a pset. Li pwobableman youn ki pi difisil. Se konsa, eseye kòmanse byen bonè, trase bagay sa yo deyò a, trase bagay sa yo deyò, ak bòn chans. Sa a te solisyon 5. [CS50.TV]