キーワードでメモを探す は、言語の基礎を学んだ方向けの C++ 実践プロジェクトです。覚えているいくつかの単語を使い、複数のフォルダから一致するメモをすべて探して、単語が実際に現れる位置を示す再利用可能なローカル検索ツールを作ります。
コースは 2 個のガイド付きラボと 1 個の独立したチャレンジで構成されています。まずインデックスで単語と文書の識別情報を結び付けます。次に検索語を組み合わせ、それらを含むすべての文書を見つけます。最後に同じルールを別のメモ集に適用します。各ラボはメモと開始用コードを個別に用意し、前の環境のファイルには依存しません。
学習内容
このコースを修了すると、次のことができるようになります。
- 相対パスで文書を識別し、異なるフォルダにある同名ファイルを区別する。
mapとsetで単語から文書集合へのインデックスを作り、単語の繰り返しで文書を重複登録しない。- ASCII 英字に基づく単語全体の照合ルールを適用し、ASCII の大文字と小文字を区別しない。
- 候補集合を AND で組み合わせ、すべての検索語を含む文書を漏れなく返す。
- 実際のパス、行番号、一致する元の行を、同じ行を重複させずに表示する。
- プログラムを再実行し、現在の練習用メモからインデックスを再構築しながら参照用の原本を保持する。
このコースの対象者
標準コンテナとファイル入力を使って、明確で検証可能なルールを持つ便利な検索プログラムを作りたい C++ 学習者を対象としています。
前提知識: 基本的なターミナル操作と、C++ の文字列、関数、vector、ファイルストリーム、基本的な例外の知識が必要です。ガイド付きラボでは、必要な map と set の操作、相対パスによる識別、集合の共通部分を説明します。
学習環境: LabEx がブラウザ内に構成済みの Linux 環境を提供します。C++17 コンパイラ、開始用コード、メモ集、Terminal が用意されています。ファイル読み込み、単語の切り出し、出力整形の補助コードは準備済みです。コマンドとプログラムのメッセージは英語で、メモのファイル名と本文は提供された内容を保持します。
よくある質問
すべての検索語が同じ行にある必要がありますか?
ありません。AND は文書全体に適用されます。各単語が別の行にあっても構いません。結果には、いずれかの検索語を含む元の行が一度ずつ表示されるため、自分で根拠を確認できます。
この検索はすべての言語を理解しますか?
単語は連続する ASCII 英字に限定し、ASCII の大文字を小文字に変換します。それ以外のバイトは区切りになります。cat と catalog は別の単語です。Unicode のファイル名と元の行の文字列は保持しますが、一般的な多言語分かち書き機能は提供しません。
変更したメモはどうインデックスに反映されますか?
プログラムを呼び出すたびに現在のファイルを読み直し、メモリ内に新しいインデックスを作ります。許可された練習用メモを編集、追加、削除したら再実行してください。参照用の原本は変更せず、永続インデックスやバックグラウンド更新サービスも使用しません。

