我希望访问一个小文本文件的完全随机行,并在C ++程序中的另一个文本文件中导入相同的行。我需要相当简单地做到这一点,我是C ++编程的初学者。我将包括main.cpp
。如果您需要其他.cpp
或.h
,请告诉我,我会发布。
Main.cpp的:
#include <fstream>
#include <iomanip>
#include <iostream>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include "getQuestion.h"
using namespace std;
int main() {
int mainMenuChoice;
ifstream Bibliography;
//string easyBib;
string easyBib;
ifstream inputFile;
cout << "Quiz Menu\n\n";
cout << "1. Play Game!\n";
cout << "2. Bibliography\n";
cout << "3. Developer Info\n";
//cout << "4. Admin Menu\n";
cout << "4. Exit\n";
cout << "Menu Choice: ";
cin >> mainMenuChoice;
switch (mainMenuChoice) {
case 1:
//int getQuestion(string Q,A);
//cout << Q;
break;
case 2:
inputFile.open("Bib.rtf");
inputFile >> easyBib;
cout << easyBib << endl;
break;
case 3:
cout << "Program made by: XXXX XXXXXXXX" << endl;
cout << "XXX. XXXXXXX'X Period 4 Social Studies Class" << endl;
break;
/*case 4:
break;*/
case 4:
cout << "Thank you for playing!" << endl;
return(0);
default:
cout << "Sorry, Invalid Choice!\n";
return(0);
}
return(0);
}
答案 0 :(得分:3)
最简单的解决方案是逐行(使用getline
)将整个文件读入vector<string>
。然后从该向量中选择一个随机元素是微不足道的。
您可以从输入流中读取一行,如下所示:
string line;
getline( inputFile, line );
它返回对流的引用,可以直接测试该错误。所以这很容易变成这样的循环:
vector<string> lines;
for( string line; getline(inputFile,line); )
{
lines.push_back(line);
}
现在,您可以使用size
的{{1}}函数来确定您已阅读的行数,然后选择随机行。
vector
当然,您需要知道文件中的行数少于size_t iRandLine = rand() % lines.size();
string randomLine = lines[iRandLine];
cout << "Line " << (iRandLine+1) << ": " << randomLine << endl;
行。否则,您必须将多次调用合并到RAND_MAX
才能覆盖范围。