我需要一些C ++的帮助
我正在尝试创建一个程序,其中包含练习不同德语案例的练习。
对所有问题和各自的答案进行硬编码似乎是一项非常多的工作,效率极低。
我希望我的程序要做的是:从文件X中获取一个随机行,并从文件Y中获取相同的行号。(这似乎是从外部文件中获取问题和答案的最简单方法。)我,获得一个随机数似乎是最合乎逻辑的,并将其用作行号。但是,这就是我有多远......
我知道基本的C ++,但我非常渴望学习。
任何人都可以向我解释如何解决这个问题,包括所有必要的命令吗?
答案 0 :(得分: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]
}
答案 1 :(得分:0)
有两种方法可以做到这一点:
如果您打算获得问题/答案对,最好只逐行阅读who文件并存储所有行。然后你只需在数组中查找。
如果由于某种原因你只想一次获得一行,你必须读取行并计算,直到你得到你想要的行。
答案 2 :(得分:0)
您可能每行都有一个关键字,例如ID。
该ID可以与两个问题配对,如果您有多个文件则可以回答。或者只是将问题与答案相同,甚至是相同的文件。
答案 3 :(得分:0)
您正在构建数据库 您应该使用数据库。
问题在于问题和答案是可变长度记录,这使得定位变得困难。如果所有记录的长度相同,则可以更快地定位到随机记录。
为了找到文本行,您需要读取所有其他换行符(因为它们不在每行中的同一列中)。如果你只需要搜索一次,但很多次搜索很慢,这很好。现在出现了数据库的原因。
要更快地找到问题和答案,请创建索引文件或表。 (开始闻起来像数据库)。索引文件将包含[question #, file position]
形式的记录,其中文件位置是问题开始时问题文件中的位置。
您可以将此文件加载到内存中并使用它来索引“问题”文件。通过将索引内容存储到文件中,每次程序启动时都不必从头开始构建它;只有当问题的文件发生变化时