c++ - 我需要访问一个小文本文件的完全随机行,并在 C++ 中的另一个文本文件中导入同一行

标签 c++ random

我希望访问一个小文本文件的完全随机行,并在 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);
}

最佳答案

最简单的解决方案是将整个文件逐行读取(使用 getline )到 vector<string> 中。 。然后从该 vector 中选择一个随机元素就很简单了。

您可以像这样从输入流中读取一行:

string line;
getline( inputFile, line );

它返回对流的引用,可以直接测试是否有错误。所以这很容易变成这样的循环:

vector<string> lines;
for( string line; getline(inputFile,line); )
{
    lines.push_back(line);
}

现在您可以使用 size vector的功能确定您已阅读了多少行,然后随机选择一行。

size_t iRandLine = rand() % lines.size();
string randomLine = lines[iRandLine];
cout << "Line " << (iRandLine+1) << ": " << randomLine << endl;

当然,你需要知道会少于 RAND_MAX文件中的行。否则,您将不得不组合多个调用 rand只是为了覆盖范围。

关于c++ - 我需要访问一个小文本文件的完全随机行,并在 C++ 中的另一个文本文件中导入同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944857/

相关文章:

c# - 如何根据 C# 中的标准随机化数字?

python - 不同概率的随机抽样

python - 我到底如何(以及为什么)可以通过 numpy.random 访问所有 NumPy?

c++ - 我可以使用 Boost.Asio 和 Boost.Beast 库发出 HTTPS 请求或 HTTP/2 请求吗?

c++ - 类模板中的隐藏好友模板

c++ - 重载函数模板

java - 防止冗余随机数

c++ - 如何在没有同步的情况下创建线程本地内存

c++ - 在 C++ 中生成随机字符串的最有效方法是什么?

r - 如何最好地使用其概率函数模拟任意单变量随机变量?