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

有两种方法可以做到这一点:

  1. 如果您打算获取问题/答案对,则最好逐行阅读 who 文件并存储所有行。然后你只需在数组中查找它。

  2. 如果由于某种原因您一次只想获取一行,则必须阅读行并数数,直到到达您想要的行。

于 2013-06-25T19:13:04.613 回答
0

每行可能都有一个关键字,例如 id。

如果您有多个文件,该 ID 可以与两个问题和答案配对。或者只是将问题与答案相同的顺序,甚至相同的文件配对。

于 2013-06-25T19:18:38.057 回答
0

您正在构建一个数据库。
您应该使用数据库。

问题是问题和答案都是变长记录,定位困难。如果所有记录的长度相同,您可以更快地定位到随机记录。

为了找到文本行,您需要阅读所有其他换行符(因为它们不在每一行的同一列中)。如果您只需要搜索一次,这很好,但多次搜索非常慢。现在是数据库的原因。

要更快地找到问题和答案,请创建索引文件或表。(开始闻起来像数据库)。索引文件将包含格式的记录,[question #, file position]其中文件位置是问题文件中问题开始的位置。

您可以将此文件加载到内存中并使用它来索引“问题”文件。通过将索引内容存储到文件中,您不必在每次程序启动时都从头开始构建它;仅当问题的文件更改时。

于 2013-06-25T19:30:11.083 回答