>> SPEAKER 1: Mari kita memberi penyelesaian ini cuba.
Jadi mari kita lihat apa yang kami Nod struct akan kelihatan seperti.
Di sini, kita lihat kita akan mempunyai Bool Word dan nod bintang struct
Kanak-kanak braket abjad.
Perkara Jadi pertama yang anda mungkin tertanya-tanya, mengapa hash abjad ditakrifkan sebagai 27?
Nah, ingat bahawa kita akan perlu yang akan mengendalikan koma atas, jadi
yang akan menjadi sebahagian dari satu khas kes sepanjang program ini.
>> OK, sekarang, ingat bagaimana Indone sebenarnya berfungsi.
Katakan kita mengindeks kucing perkataan, maka dari akar indone kami,
kita akan melihat Kanak-kanak pelbagai, dan kita akan melihat
indeks yang sepadan dengan huruf C. Jadi yang akan menjadi indeks dua.
Jadi memandangkan, yang akan memberikan kita nod baru, dan kemudian kita akan
bekerja dari nod itu.
>> Jadi diberikan nod itu, kami sekali lagi akan melihat pelbagai Kanak-kanak itu,
dan kita akan melihat indeks sifar untuk sesuai dengan A dalam kucing.
Demikian maka kita akan pergi dengan node itu, dan diberikan nod itu, kita akan
melihat indeks yang sepadan T. Dan beralih dengan node itu,
akhirnya, kita telah benar-benar kelihatan melalui Cat perkataan kami, dan kini bool
Word sepatutnya untuk menunjukkan sama ada perkataan ini diberikan sebenarnya perkataan.
>> Jadi mengapa kita perlu bahawa kes khas?
Nah, bagaimana jika bencana perkataan di dalam kamus kita, tetapi
kucing perkataan itu tidak?
Jadi dalam mencari untuk melihat jika kucing perkataan adalah di dalam kamus kita, kita akan
berjaya melihat melalui indeks C-A-T dan mencapai nod, tetapi itu
hanya kerana malapetaka yang berlaku kepada mewujudkan nod dalam perjalanan dari C-A-T semua
jalan ke akhir perkataan.
Jadi bool Word digunakan menunjukkan sama ada lokasi ini tertentu sebenarnya
menunjukkan perkataan.
>> Baiklah, jadi sekarang kita tahu apa yang Indone akan kelihatan seperti, mari kita lihat
pada majlis Load.
Jadi Beban akan mengembalikan bool untuk sama ada kita berjaya atau
kamus tidak berjaya dimuatkan dan ini akan menjadi kamus
yang kita mahu untuk beban.
Perkara itu kita akan lakukan adalah terbuka up yang kamus untuk membaca.
Kita perlu memastikan kita tidak gagal, jadi jika kamus itu tidak
berjaya dibuka, ia akan kembali Tidak, di mana kita akan
kembali Palsu.
Tetapi menganggap bahawa ia berjaya dibuka, maka kita sebenarnya boleh membaca
melalui kamus.
>> Perkara itu kita akan mahu lakukan adalah kita mempunyai ini
akar ubah global.
Sekarang, akar akan menjadi bintang nod.
Ia bahagian atas indone kita bahawa kita akan iterating melalui.
Perkara itu kita akan mahu lakukan adalah memperuntukkan memori untuk akar kami.
>> Perhatikan bahawa kita menggunakan Calloc fungsi, yang pada dasarnya yang sama
sebagai fungsi Malloc, kecuali ia dijamin untuk kembali sesuatu yang
sepenuhnya menumpukan perhatian di luar.
Jadi, jika kita digunakan Malloc, kita perlu pergi melalui semua petunjuk dalam kita
nod dan memastikan bahawa mereka semua null.
Jadi Calloc akan melakukannya untuk kita.
>> Sekarang, seperti Malloc, kita perlu membuat memastikan bahawa peruntukan yang sebenarnya
berjaya.
Jika ini kembali batal, maka kita perlu menutup kamus kami
memfailkan dan kembali Palsu.
Jadi menganggap peruntukan itu berjaya, kita akan menggunakan nod
bintang Kursor untuk melelar melalui indone kami.
Jadi akar kita tidak pernah akan berubah, tetapi kita akan menggunakan Kursor untuk
sebenarnya pergi dari nod ke nod.
>> Baiklah, jadi dalam ini Untuk gelung, kami membaca fail kamus,
dan kami menggunakan sekurang fgetc.
Jadi fgetc akan merebut satu watak dari fail.
Kami akan terus meraih aksara manakala kita tidak sampai ke
berakhir fail, jadi terdapat dua kes kita perlu untuk mengendalikan.
Yang pertama, jika watak itu bukan seorang Laluan baru ini, jadi kita tahu jika ia adalah yang baru
line, maka kita kira-kira untuk bergerak ke perkataan baru.
Tetapi menganggap ia bukan satu talian baru, maka di sini, kita mahu memikirkan
indeks kita akan indeks ke dalam dalam pelbagai Kanak-kanak yang
kita melihat sebelum ini.
>> Jadi seperti yang saya katakan sebelum ini, kita perlu kes khas koma atas itu.
Notis yang kita gunakan operator pertigaan di sini, jadi kita akan membaca
ini seolah-olah watak kita baca dalam adalah apostrofe, maka kita akan
set indeks sama dengan abjad tolak 1, yang akan menjadi indeks 26.
Lagi, jika ia tidak apostrofe, maka kita akan menetapkan indeks
sama dengan c tolak.
Jadi ingat kembali dari p sebelumnya set, c tolak akan memberi kita
kedudukan abjad c, jadi jika c huruf A, kemahuan ini
memberikan kita indeks sifar.
Untuk surat B, ia akan memberi kami indeks 1, dan sebagainya.
>> Jadi ini memberikan kita indeks ke dalam Kanak-kanak array yang kita mahu.
Sekarang, jika indeks ini kini null dalam Kanak-kanak yang pelbagai, ini bermakna bahawa
nod buat masa ini tidak wujud dari jalan itu, jadi kita perlu memperuntukkan
nod bagi jalan itu.
Itulah apa yang kita lakukan di sini.
Jadi kita akan, sekali lagi, gunakan Calloc fungsi supaya kita tidak mempunyai
kepada sifar keluar semua petunjuk, dan kita, sekali lagi, perlu menyemak Calloc yang
tidak gagal.
Jika Calloc tidak gagal, maka kita perlu untuk memunggah segala-galanya, kita menutup
kamus, dan kembali Palsu.
>> Jadi menganggap bahawa ia tidak gagal, maka ini akan mewujudkan anak yang baru bagi kami,
dan kemudian kita akan pergi kepada anak itu.
Kursor kami akan melelar turun kepada anak itu.
Sekarang, jika ini tidak batal untuk memulakan dengan, maka kursor hanya boleh melelar
ke kanak-kanak yang tanpa sebenarnya perlu memperuntukkan apa-apa.
Ini adalah kes di mana kita mula-mula berlaku untuk memperuntukkan kucing perkataan, dan
ini bermakna apabila kita pergi untuk memperuntukkan malapetaka, kita tidak perlu membuat
nod untuk C-A-T lagi.
Mereka sudah wujud.
>> OK, jadi apa yang lain ini?
Ini adalah keadaan di mana c adalah garis sendeng terbalik n, di mana c adalah barisan baru.
Ini bermakna bahawa kita telah berjaya selesai satu perkataan.
Sekarang, apa yang kita mahu lakukan apabila kita berjaya menamatkan satu perkataan?
Kami akan menggunakan bidang perkataan ini di dalam nod struct kami.
>> Kami mahu menetapkan bahawa untuk Benar, supaya menunjukkan bahawa nod ini menunjukkan
berjaya perkataan perkataan sebenar.
Sekarang, ditetapkan bahawa kepada Benar.
Kami mahu menetapkan semula kursor menjelaskan fakta untuk permulaan indone lagi.
Dan akhirnya, kenaikan kamus kami saiz sejak kami mendapati perkataan lain.
>> Baiklah, jadi kita akan terus melakukan itu, membaca dalam watak oleh
watak, membina nod baru di indone kami dan untuk setiap perkataan dalam
kamus, sehingga kita akhirnya mencapai c sama EOF, di mana, kita memecahkan
daripada fail.
Sekarang, terdapat dua kes di bawah yang kita mungkin telah melanda EOF.
Yang pertama adalah jika terdapat ralat membaca dari fail tersebut, jadi jika terdapat
kesilapan, kita perlu melakukan perkara yang biasa memunggah segala-galanya, menutup fail,
kembali Palsu.
Dengan menganggap tidak ada kesilapan, yang hanya bermakna kita sebenarnya melanda akhir
fail, di mana, kita menutup memfailkan dan kembali Benar kerana kita
berjaya dimuatkan kamus ke indone kami.
>> Baiklah, jadi sekarang mari kita menyemak Semak.
Melihat Semak majlis itu, kita lihat Semak yang akan mengembalikan bool.
Ia mengembalikan Benar jika perkataan ini bahawa itu yang diluluskan adalah di indone kami.
Ia mengembalikan Salah sebaliknya.
>> Jadi bagaimana kita boleh menentukan sama ada perkataan ini adalah di indone kita?
Kita lihat di sini bahawa, sama seperti sebelum ini, kita akan menggunakan kursor untuk melelar
melalui indone kami.
Sekarang, di sini, kita akan melelar atas seluruh perkataan kami.
Jadi iterating lebih perkataan kita diluluskan, kita akan menentukan
indeks ke dalam pelbagai Kanak-kanak yang sepadan dengan perkataan kurungan i.
Jadi ini akan kelihatan betul-betul seperti Beban, di mana jika kurungan perkataan i merupakan
koma atas, maka kita mahu menggunakan indeks abjad tolak 1 kerana kita ditentukan
di situlah kita akan untuk menyimpan apostrofi.
>> Yang lain kita akan menggunakan tolower perkataan kurungan i.
Jadi ingat perkataan yang boleh mempunyai sewenang-wenangnya permodalan, dan dengan itu kita
ingin memastikan bahawa kita menggunakan versi kecil perkara.
Dan kemudian tolak dari huruf kecil yang kepada, sekali lagi, memberi kita
kedudukan abjad watak itu.
Supaya akan menjadi indeks kami ke dalam pelbagai Kanak-kanak itu.
>> Dan kini, jika indeks itu ke dalam Kanak-kanak array adalah batal, ini bermakna kita
tidak lagi boleh terus iterating turun indone kami.
Jika itu berlaku, perkataan ini tidak boleh mungkin berada dalam indone kita, kerana jika ia
telah, yang akan bermakna akan ada jalan ke perkataan itu, dan anda akan
tidak pernah menghadapi null.
Jadi menghadapi batal, kita kembali Palsu.
Perkataan itu tidak ada di dalam kamus.
Jika tidak batal, maka kita akan terus iterating, jadi kita akan
untuk mengemaskini kursor kami untuk menunjukkan bahawa nod tertentu pada indeks itu.
>> Oleh itu, kita terus melakukan bahawa sepanjang keseluruhan perkataan.
Andai kata kita tidak pernah memukul batal, yang cara kami dapat mendapatkan melalui keseluruhan
dunia dan mencari nod di indone kami, tetapi kami tidak cukup dilakukan lagi.
Kami tidak mahu hanya kembali Benar.
Kami mahu kembali kursor perkataan ralat sejak, ingat lagi, jika kucing tidak
dalam kamus dan malapetaka kita, maka kita akan berjaya melalui
kucing perkataan, tetapi perkataan kursor akan palsu dan tidak benar.
Oleh itu, kita kembali perkataan kursor untuk menunjukkan sama ada nod ini sebenarnya perkataan,
dan itu sahaja untuk cek.
>> Jadi mari kita lihat Saiz.
Jadi Saiz akan menjadi agak mudah sejak, ingat dalam Beban, kami
menokok saiz kamus untuk setiap perkataan yang kita hadapi.
Jadi Saiz hanya akan kembali saiz kamus, dan itu sahaja.
>> Baiklah, jadi akhir sekali, kita mempunyai Punggahan.
Jadi Punggahan, kita akan menggunakan fungsi rekursi untuk benar-benar melakukan semua
kerja untuk kita, jadi fungsi kami akan dipanggil-beban.
Apa yang pengurang beban akan lakukan?
Kita lihat di sini-beban yang akan melelar atas semua kanak-kanak di
nod yang khusus ini, dan jika kanak-kanak nod tidak batal, maka kita akan
memunggah nod kanak-kanak.
>> Jadi ini akan secara rekursif memunggah semua anak-anak kita.
Apabila kita pasti bahawa semua anak-anak kita telah dipunggah, maka kita
boleh membebaskan diri kita, jadi memunggah diri kita.
Jadi ini secara rekursif akan memunggah indone keseluruhan, dan kemudian sekali itulah
dilakukan, kita hanya boleh kembali Benar.
Memunggah tidak boleh gagal, kami hanya membebaskan sesuatu.
Jadi sebaik sahaja kami selesai membebaskan segala-galanya, kembali Benar.
Dan itu sahaja.
Nama saya Rob, dan ini adalah [didengar].