>> ЗВУЧНИК 1: Да се ​​даде ова решение, се обиде.
Па ајде да ги разгледаме во она што нашите Struct јазол ќе изгледа.
Еве, гледаме дека се случува да имаат Bool Word и еден јазол struct ѕвезда
Деца заградата писмо.
Па првото нешто може да се прашуваат, зошто е азбука хаш дефинирана како 27?
Добро, се сеќавам дека ние ќе треба да се справува со апостроф, па
тоа ќе биде нешто на некој посебен случај во текот на оваа програма.
>> Добро, сега, се сеќавам како TRIE всушност работи.
Да речеме дека ние сме индексирање зборот мачки, потоа од коренот на нашите Trie,
ние ќе се погледне на децата низа, и ние ќе треба да се погледне на
индекс, кој одговара на писмото C. Значи тоа ќе биде индекс два.
Па со оглед на тоа, дека ќе ни даде нов јазол, а потоа ние ќе
работат од тој јазол.
>> Па со оглед на тоа јазол, ние сме уште еднаш случува да се погледне во Детската низа,
и ние ќе да се погледне во индекс нула за да одговараат на А во мачка.
Па тогаш ние ќе треба да одат на тој јазол, и со оглед на тоа јазол, ние ќе
да се погледне на индекс, кој одговара со Т и премина на тој јазол,
Конечно, имаме целосно погледна преку нашето слово Мачка, и сега bool
Зборот би требало да покажат дали ова даден збор е всушност еден збор.
>> Па зошто не ни треба тој посебен случај?
Па, што ако катастрофа зборот е во нашата речник, но
зборот мачка не е?
Па во потрага за да видите дали зборот мачка е во нашата речник, ние ќе
успешно се погледне преку индекси Ц-А-Т и да го достигне еден јазол, но тоа е
само затоа што катастрофа се случи со создаде јазли на патот од Ц-А-Т ги сите
начинот на кој на крајот на зборот.
Па bool збор се користи покажат дали овој одредена локација, всушност,
укажува на зборот.
>> Добро, па сега дека знаеме што е TRIE се случува да изгледа, ајде да погледнеме
на Вчитај функција.
Па Вчитај ќе се врати bool за тоа дали ние успешно или
неуспешно натоварен речник и ова ќе биде речникот
дека сакаме да се вчита.
Па првото нешто ние ќе треба да направите е да отворите до кои речник за читање.
Ние треба да бидете сигурни дека ние не успее, па ако речникот не беше
успешно отворен, ќе се врати Не, во кој случај ние ќе
враќање false.
Но претпоставувајќи дека тоа успешно отвори, тогаш ние всушност може да се прочита
преку речникот.
>> Па првото нешто ние ќе треба да сакате да направите е да ја имаме оваа
глобалната променлива корен.
Сега, корен ќе биде еден јазол ѕвезда.
Тоа е на врвот на нашата Trie дека ние сме ќе треба да се процесирањето преку.
Значи прво нешто што сте ќе сакате да се направите е да алоцира меморија за нашиот корен.
>> Забележете дека ние сме со користење на Calloc функција, која е во основа иста
како Примерок функција, освен тоа е гарантирано да се вратат нешто што е
целосно zeroed надвор.
Значи, ако ние се користи Примерок, ние ќе треба да се поминат низ сите покажувачи во нашата
јазол и бидете сигурни дека сите тие се ништовни.
Па Calloc ќе го правам тоа за нас.
>> Сега, само како Примерок, ние треба да се направи сигурни дека распределбата е всушност
успешна.
Ако ова се врати на нула, тогаш ние треба да ги затвориме нашите речник
датотека и враќање false.
Значи под претпоставка распределбата беше успешна, ние ќе треба да се користи еден јазол
ѕвезда покажувачот да iterate преку нашата Trie.
Значи нашиот корен никогаш не се случува да се промени, но ние ќе се користи покажувачот за да
всушност, оди од јазол да јазол.
>> Добро, така што во овој За јамка, ние сме читање преку речникот датотека,
и ние сме со користење на fgetc.
Па fgetc се случува да го зграби еден карактер од датотеката.
Ние ќе продолжиме грабање карактери, додека ние не се постигне
крајот на датотеката, па така постојат два случаи ние треба да се справи.
Прво, ако карактерот не беше нова линија, за да знаеме дали тоа беше нов
линија, тогаш ние сме за да да се движи кон нов збор.
Но под претпоставка дека тоа не е нова линија, а потоа тука, ние сакаме да дознаам
индекс ние ќе индекс во во Детскиот низа што
ние погледна порано.
>> Значи како што реков претходно, ние треба да се посебен случај на апостроф.
Забележете ние сме со користење на тројна оператор тука, па ние ќе го прочитате
ова како ликот што читаме во било апостроф, тогаш ние ќе треба да
постави индекс еднаква на писмо минус 1, кој ќе биде индекс 26.
Друго, ако не беше апостроф, тогаш ние ќе треба да се постави на индекс
еднаква на c минус.
Значи се сеќавам назад од претходната стр сетови, в минус се случува да ни даде
азбучен позиција на в, па ако в е буквата А, ова ќе
ни даде индекс нула.
За буквата Б, тоа ќе им даде ни индекс 1, и така натаму.
>> Па ова ни дава индекс во Деца низа што сакаме.
Сега, ако овој индекс е моментално null во Детскиот низа, што значи дека
еден јазол во моментов не постои од тој пат, па ние треба да одвои
јазол за тој пат.
Тоа е она што го правиме тука.
Па ние ќе се, повторно, користете Calloc функција, така што ние немаме
на нула од сите покажувачи, а ние, повторно, треба да се провери дека Calloc
не пропадне.
Ако Calloc не успее, тогаш ние треба да се исклучи сè, да ги затвориме
речник, и да се врати лажни.
>> Значи под претпоставка дека тоа не успее, тогаш ова ќе се создаде нов дете за нас,
и потоа ќе одат на тоа дете.
Нашите курсорот ќе iterate надолу за да тоа дете.
Сега, ако ова не е нула за да започне со тоа, тогаш покажувачот само да iterate
надолу за да тоа дете без всушност мора да се доделат ништо.
Ова е случај каде што првпат се случи за алоцирање на зборот мачка, и
тоа значи дека кога одиме за алоцирање на катастрофа, ние не треба да се создаде
јазли за C-A-T повторно.
Тие веќе постои.
>> Добро, па што е ова на друго место?
Ова е состојба каде што в беше обратна коса црта n, каде в е нова линија.
Ова значи дека имаме успешно заврши збор.
Сега, она што сакаме да правиме кога ќе успешно заврши еден збор?
Ние ќе се користи овој збор поле внатрешноста на нашите struct јазол.
>> Ние сакаме да го поставите тоа да Точно, така што укажува на тоа дека јазол покажува
успешна збор вистински збор.
Сега, во собата дека на true.
Ние сакаме да ги ресетирате нашите курсорот точка на почетокот на Trie повторно.
И конечно, прираст нашите речник големината, бидејќи ние се најде друг збор.
>> Добро, па ние ќе да го задржи тоа дека, читање карактер од страна на
карактер, изградба на нови јазли во нашите Trie и за секој збор во
речник, додека ние конечно достигне в еднакво EOF, во кој случај, ние се пробие
од датотеката.
Сега, постојат два случаи под кои би можеле да имаат хит EOF.
Првиот е ако имало грешка читање од датотека, па ако има
грешка, ние треба да направите типичен бриши сето она, во близина на датотеката,
враќање false.
Под претпоставка дека не беше грешка, дека само значи дека ние всушност хит на крајот на
на датотеката, во кој случај, ние затвори поднесе и да се вратат Точно, бидејќи ние
успешно вчитан речникот во нашите Trie.
>> Добро, па сега ајде да проверете Провери.
Гледање на Проверете функција, гледаме дека Проверете нема да се врати bool.
Тоа Враќа true ако овој збор дека тоа е се пренесува е во наши Trie.
Го враќа false.
>> Па, како ќе се дојде да се утврди дали овој збор е во наши Trie?
Гледаме дека овде, исто како и пред тоа, ние ќе се користи покажувачот да iterate
преку нашата Trie.
Сега, тука, ние ќе iterate над целата наша збор.
Па процесирањето над зборот ние сме помина, ние ќе треба да се одреди
индекс во Детскиот низа што одговара на зборот заградата јас.
Значи ова се случува да изгледаат точно како Оптоварување, каде што ако зборот заградата i е
апостроф, тогаш ние сакаме да се користи индекс азбука минус 1, бидејќи ние утврдени
дека е местото каде што ние ќе за да ја запази апострофи.
>> Друг ние ќе го користите tolower Зборот заградата јас.
Значи се сеќавам тој збор може да има произволен капитализација, и така ние
сакате да бидете сигурни дека ние сме користење мали букви верзија на нештата.
А потоа одземе од тоа мали А до, уште еднаш, да ни даде на
азбучен позиција од овој карактер.
Така што ќе биде нашиот индекс во Детскиот низа.
>> И сега, ако тој индекс во Детската низа е нула, тоа значи дека ние
не може да продолжи процесирањето одредување на нашите Trie.
Ако тоа е случај, овој збор не може можност да биде во нашите Trie, бидејќи ако тоа
беа, тоа би значело дека ќе биде патот надолу до тој збор, и ќе
никогаш не се судрите со нула.
Така наиде на нула, ќе се вратиме лажно.
Зборот не е во речникот.
Ако не беше нула, тогаш ние ќе треба да продолжи процесирањето, па ние ќе
за да обновите нашата курсорот да се укаже дека особено јазол на тој индекс.
>> Па ние го задржи тоа го прават во текот на целиот збор.
Претпоставувајќи дека никогаш не удрил нула, тоа значи дека бевме во можност да се добие во текот на целиот
свет и да се најде еден јазол во нашата Trie, но ние не сме сосема направиле досега.
Ние не сакаме само да се вратат Точно.
Ние сакаме да се врати курсорот грешка збор бидејќи, се сеќавам еднаш, ако мачка не е
во нашата речник и катастрофа е, тогаш ние успешно ќе добие преку
зборот мачка, но курсорот збор ќе бидат лажни и не е точно.
Па ние се врати курсорот збор за да се покаже дали овој јазол е всушност еден збор,
и тоа е тоа за чек.
>> Па ајде проверете големина.
Па Големина ќе биде прилично лесно бидејќи, се сеќавам во оптоварување, ние сме
зголемување, Речник големина за секој збор што се сретнуваме.
Па Големина е само ќе се врати речник големина, и тоа е тоа.
>> Сите во право, па на крај, ние имаме се исклучи.
Па бриши, ние ќе треба да се користи рекурзивен функција да всушност прават сите
на работа за нас, така што нашите функција се случува да се нарече Unloader.
Што Unloader случува да се направи?
Гледаме дека овде Unloader се случува да се iterate во текот на сите деца во
ова особено јазол, и ако детето јазол не е нула, тогаш ние ќе треба да
бриши јазол.
>> Значи ова се случува да рекурзивно бриши сите наши деца.
Еднаш ние сме сигурни дека сите наши деца се растоварува, тогаш ние
може да се ослободиме, па исклучи себе.
Значи ова рекурзивно ќе бриши целата Trie, а потоа еднаш тоа е
направи, ние само може да се врати Точно.
Бриши не може да пропадне, ние сме само што си заштедувате работи.
Значи еднаш сме завршиш ослободување сè, се врати Точно.
И тоа е тоа.
Моето име е Роб, и ова беше [нечујни].