スピーカ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を返します。 そして、それはこれだけです。 私の名前はロブであり、この [聞こえない]だった。