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].