1

C++ のヘルプが必要です

さまざまなドイツ語のケースを練習する練習問題を含むプログラムを作成しようとしています。

すべての質問とそれぞれの回答をハードコーディングするのは、非常に手間がかかり、非常に非効率的です。

私がプログラムに実行させたいのは、ファイル X からランダムな行を取得し、ファイル Y から同じ行番号を取得することです (これは、外部ファイルから質問と回答の両方を取得する最も簡単な方法のようです)。乱数を取得し、それを行番号として使用するのが最も論理的と思われます。でも、そこまでたどり着いたのは…

私は基本的な C++ を知っていますが、学ぶことにとても熱心です。

必要なすべてのコマンドを含め、これを実行する方法を誰かに説明してもらえますか?

4

4 に答える 4

1

まず、質問と回答を同じテキスト ファイルに保存することをお勧めします。おそらく、質問行と回答行を交互に配置します。これにより、間違いの修正、質問の追加/削除、およびデータの一般的なメンテナンスが容易になります。

ただし、それらを別々のファイルに保存したい場合は、次のコード スニペットでテキスト ファイルを読み取り、質問を配列 (stl ベクトル) に格納します。この配列は、任意の方法でインデックス付けまたは反復処理できます。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main()
{
        std::ifstream file("questions.txt");
        std::string line;
        std::vector<std::string> questions;
        while (std::getline(file, line))
        {
            questions.push_back( line );
        }
        // Now do something interesting with your questions. You can index them
        // like this: questions[5], or questions[random_index]
}
于 2013-06-25T19:27:50.173 に答える
0

データベースを構築しています。
データベースを使用する必要があります。

問題は、質問と回答が可変長のレコードであるため、配置が難しいことです。すべてのレコードが同じ長さである場合、ランダム レコードにすばやく配置できます。

テキスト行を見つけるには、他のすべての改行を読み飛ばす必要があります (改行はすべての行で同じ列にあるわけではないため)。これは、一度だけ検索する必要がある場合は問題ありませんが、何度も検索すると非常に遅くなります。次に、データベースの理由について説明します。

質問と回答をすばやく見つけるには、インデックス ファイルまたはテーブルを作成します。(データベースのようなにおいがし始めます)。インデックス ファイルには、ファイル位置が問題のファイル内で問題が開始する位置である形式のレコードが含ま[question #, file position]ます

このファイルをメモリにロードし、それを使用して「質問」ファイルにインデックスを付けます。インデックスの内容をファイルに保存することにより、プログラムを開始するたびに最初から作成する必要がなくなります。質問のファイルが変更された場合のみ。

于 2013-06-25T19:30:11.083 に答える
0

これには 2 つの方法があります。

  1. 質問と回答のペアを取得する予定がある場合は、who ファイルを 1 行ずつ読み取り、すべての行を保存することをお勧めします。次に、配列でそれを検索します。

  2. 何らかの理由で一度に 1 行だけ取​​得したい場合は、目的の行に到達するまで、行を読み取ってカウントする必要があります。

于 2013-06-25T19:13:04.613 に答える