>> スピーカ1：それでは挙げてみましょう このソリューションTRY。
それでは、どのような私たちを見てみましょう 構造ノードは、次のようになります。
ここで、我々は持っているつもりです参照してください。 BOOL Wordや構造体節スター
子供たちがアルファベットを囲む。
あなたは不思議に思うかもしれませんので、まず最初に、 なぜアルファベットハッシュは27のように定義されている？
まあ、我々は必要になるだろうことを覚えておいてください そう、アポストロフィを扱うべき
それはやや特殊なのになるだろう このプログラムを通してケース。
>> [OK]を、今、どのように覚えている トライは実際に動作します。
それでは、単語猫をインデックス化しているとしましょう​​、 その後、私たちのトライのルートから、
私たちは子供たちを見ていくつもりです アレイと、私たちが見ていくつもりです
文字に対応するインデックス C.だから、インデックス2になります。
だから、私たちを与える、ことを考えると 新しいノードますし、私たちはよ
そのノードからの仕事。
>> だから、そのノードを考えると、我々は再びだ 子配列を見に行く、
そして我々は、インデックスをゼロに見ていくつもりです 猫のAに対応する。
それでは、私たちは、そのノードに行くつもりだ、 そのノードを考えると、我々は行っている
対応しているインデックスを参照するため Tに、そのノードに移動する、
最後に、我々は完全に見てきました 私たちの言葉猫を通して、今ブール
ワードがどうかを示すことになっている この与えられた単語は実際には単語である。
>> では、なぜ我々は、特殊なケースが必要なのでしょうか？
さて、どのような場合の単語の大惨事 私たちの辞書にあるが、
単語の猫ではないですか？
だから、言葉の猫であるかどうかを探している 私たちの辞書に、我々はするつもりだ
首尾指標に目を通す C-A-Tおよびノー​​ドに到達するが、それはです
大惨事はに起こったという理由だけで すべてのC-A-Tから途中でノードを作成
単語の末尾への道。
そうブールワードが使用されているかどうかを示す この特定の場所に実際
単語を示しています。
>> 大丈夫、だから今我々が知っていることを何A トライそれでは、見てみましょう、のように見えるために起こっている
ロード機能で。
だから、ロードブールを返すために起こっている どうか、我々は成功したりするため
失敗したロード辞書 これは、辞書になるだろう
私たちは、ロードすること。
私たちがやろうとしているので、最初に開放されている 読書のため、その辞書をバックアップします。
私たちは失敗しなかったことを確認する必要があり、 そう辞書がなかった場合
正常にオープン、それが返されます いいえ、その場合、我々はするつもりだ
falseを返します。
しかし、それが正常と仮定すると 開かれた、我々は実際に読むことができます
辞書を通して。
>> 我々はするつもりだそう最初の事 何をしたい我々はこれを持っている
グローバル変数ルート。
今、ルートノードのスターになるだろう。
それは我々がしているという我々のトライのトップだ 繰り返し処理されようとして。
我々はするつもりだそう最初の事 何私達のルートにメモリを割り当てるです。
>> 我々はCALLOCを使用していることに注意してください 基本的には同じである機能、
malloc関数として、それはある点を除く 何かを返すことが保証
完全にゼロ。
我々はのmalloc使用のであれば、我々はする必要があります 私たちの内のポインタのすべてを行く
ノードとことを確認してください 彼らはすべてのNULLだ。
だから、callocは、私たちのためにそれを行うだろう。
>> 今、ちょうどmallocのように、我々は確認する必要があり 割り当ては、実際のことを確認してください
成功。
これはnullを返した場合、我々は 私たちの辞書を閉じる必要が
提出し、falseを返します。
そのように割り当てあったと仮定すると 成功した、我々はノードを使用するつもりだ
反復するためにカーソルをスター 私たちのトライを通じて。
だから私たちのルートは変更するつもりはありませんですが、 しかし、我々は、カーソルを使用するつもりだ
実際にノードからノードへ移動します。
>> このループでは、我々はそのように、すべての権利 辞書ファイルを通読、
そして我々はfgetc関数で使用している。
だから、fgetc関数は、単一のをつかむために起こっている ファイルからの文字。
私たちはつかんで継続するつもりだ 文字我々は達していないながら、
ファイルの終わりがあります。したがって 私たちが処理する必要が2例。
文字がなかった場合、最初の 新しい行、それは新しかったので、もし私たちが知っている
行、その後、我々はしようとしている 新しい単語に移る。
しかし、その後、それは新しい行ではなかったと仮定すると ここでは、把握したい
我々はへのインデックスとしている指標 その子配列内の
我々は前に見た。
>> 私が前に言ったようなので、我々はする必要が 特殊なケースアポストロフィ。
我々は三項演算子を使用している注意してください ここに、私たちは読んでするつもりだ
この我々が読み取った文字だったかのように アポストロフィは、その後、我々はするつもりだ
アルファベットマイナスに等しいインデックスを設定 指数26となります1。
そうでなければ、それはアポストロフィでなかった場合には、 その後、我々は、インデックスを設定するつもりだ
CマイナスAに等しい。
だから、前のPセットから覚えて、 CマイナスAは私たちに与えるために起こっている
もしそうであれば、Cのアルファベット順の位置、 Cは、文字A、この意志です
私たちにインデックスゼロを与える。
文字Bは、それが与えるであろう 私たちのインデックス1、というように。
>> だから、これは私たちへのインデックスを提供します 私たちが望む子ども配列。
さて、このインデックスは、現在nullの場合 子供アレイは、そのつまり
ノードには、現在から存在していない そのパスは、私たちは割り当てる必要が
そのパスのノード。
それは我々がここで何をすべきかだ。
だから我々は、再び、CALLOCを使用するつもりだ 機能我々は必要がないように
ポインタのすべてをゼロとするために、我々、 再び、そのCALLOCをチェックする必要があります
失敗しなかった。
CALLOCが失敗したのなら、私たちは必要に 全てをアンロードするには、私たちを閉じる
辞書、およびfalseを返します。
>> だから、その後、失敗しなかったと仮定して これは、私たちのために新しい子を作成します
そして、我々は、その子に移動します。
当社のカーソルが繰り返されます その子まで。
さて、これはそもそもNULLでなかった場合には、 カーソルだけ繰り返すことができます
実際にすることなく、その子まで 何を配分すること。
これは、我々が最初に起こったケースで​​ある 単語の猫を割り当てると、
我々は割り当てに行くときには意味 大災害、我々が作成する必要はありません
再びC-A-T用のノード。
彼らはすでに存在しています。
>> [OK]を、ので、このほかには何ですか？
これはCだった条件である Cは新しいラインだったバックスラッシュN、。
これは、我々が成功していることを意味します 単語を完成させた。
今、私たちはときに我々に何をすべきかをしたいですか 成功裏に単語を完了？
我々は、このWordのフィールドを使用するつもりだ 当社の構造体ノードの内部。
>> 我々はそのように、Trueにそれを設定したい このノードが示していることを示し
成功した単語の実際の言葉。
今、Trueにそれを設定します。
我々はポイントに私たちのカーソルをリセットしたい もう一度トライの先頭に。
そして最後に、私たちの辞書をインクリメント 我々は別の単語を見つけたので、サイズ。
>> すべての権利、私たちはやり続けるつもりだ して文字を読み込むと、その
文字に新しいノードを構築する 私たちのトライと内の各単語のための
辞書、我々は最終的にCに到達するまで 、我々は壊れ、その場合、EOFに等しい
ファイルが不足しています。
今、2例が下にあります 私たちは、EOFにヒットしているかもしれない。
エラーが発生した場合、まず、ある あった場合は、ファイルから読み込むので、
エラー、我々は典型的なを実行する必要があります すべてをアンロードし、ファイルを閉じ、
falseを返します。
エラーがなかったと仮定すると ちょうど私達が実際の終了を打つ意味
ファイルは、その場合、我々は、閉じ 我々以来提出し、Trueを返します
成功した辞書をロード 私たちのトライへ。
>> 大丈夫、だから今みましょう チェックアウトチェック。
チェック機能を見ると、我々が表示さ ていることを確認し、ブール型にを返すために起こっている。
この言葉は、それがだとした場合にはTrueを返します 私たちのトライである渡される。
それは、それ以外の場合はFalseを返します。
>> では、どのようにするかどうかを判断しようとしている この言葉は、私たちのトライである？
我々は、その直前のようにここを参照してください、 私たちは、反復するために、カーソルを使用するつもりだ
私たちのトライを通じて。
さて、ここでは、繰り返し処理をするつもりだ 私達の全体の単語の上に。
だから、私たちは言葉の繰り返し処理を行う 渡された、我々は決定するつもりだ
子ども配列のインデックスという 私は単語ブラケットに対応しています。
だから、これは正確に見えるようになるだろう ロード、ワードブラケットiがある場合
アポストロフィ、その後、我々は、インデックスを使用したい 1を引いたアルファベット我々は判断しているため
我々は行っているところであるである アポストロフィを格納する。
>> 他に私たちはtolowerを使用するつもりだ 単語ブラケットI。
そうすることができ、その単語を覚えている任意の 時価総額、および私たち
我々は使用していることを確認するには 物事の小文字。
して、その小文字から差し引く に、もう一度、私たちを与える
アルファベットの位置 その文字の。
だから、Googleのインデックスになるだろう 子ども配列に。
>> そして今、子供にそのインデックスの場合 配列がnullの場合、それは我々を意味します
もはや反復を継続することはできません 私たちのトライダウン。
その場合は、この言葉ができない おそらく、我々のトライになるので、どうか
があるだろうことを意味することを、だった その単語までのパス、あなたがなり
ヌルに遭遇することはありません。
だから、ヌルに遭遇、我々はfalseを返します。
言葉は辞書にありません。
それがnullでないならば、我々はするつもりだ 反復を継​​続し、私たちはなるだろう
それを指すように私たちのカーソルを更新する そのインデックスの特定のノード。
>> だから我々は全体でそれをやり続ける 単語全体。
、我々はヌルを打ったことがないと仮定する手段 我々は全体を介して取得することができました
世界と私たちのトライのノードを見つけ、 しかし、我々は非常にまだ終わっていない。
我々だけtrueを返すようにしたくない。
私たちは、カーソル·エラーワードを返すようにしたい もう一度覚え、以来、猫ではない場合
私たちの辞書と破局している、 その後、我々は成功して通過してしまうこともあります
単語の猫が、カーソル·ワード 偽と真ではないでしょう。
だから我々は示すために、カーソルの単語を返す このノードは、実際には単語であるかどうか、
それはチェックのためにこれだけです。
>> それでは、サイズを確認してみましょう。
だから、サイズが非常に簡単になるだろう 負荷覚え、以来、我々はしている
辞書サイズをインクリメント 我々が遭遇する各単語。
だから、サイズはちょうど返すために起こっている 辞書サイズ、それはそれだ。
>> すべての権利は​​、その最後に、アンロードを持っています。
だからアンは、我々は使用するつもりだ 実際にすべて実行する再帰関数
私たちのために仕事なので、私たちの関数の アンローダーと呼ばれようとしている。
何アンローダは何をするつもりですか？
私たちは、アンローダーをしようとしていることがわかり でも子供のすべてを反復
この特定のノード、もし子供 ノードがnullでない場合、我々はするつもりだ
子ノードをアンロードします。
>> だから、これは再帰的にしようとしている 私たちの子供たちのすべてをアンロードします。
我々は我々の子供たちのすべてのことを確認してもらった 我々はその後、アンロードされた
自分自身を解放するため、私たち自身をアンロードすることができます。
だから、これは再帰的にアンロードされます 全体トライしてから、それはだ、一度
行って、私たちはtrueを返すことができます。
アンは、私たちがしている、失敗することはできません 物事を解放。
だから我々は解放終わったら すべては、Trueを返します。
そして、それはこれだけです。
私の名前はロブであり、この [聞こえない]だった。