2

小さなテキストファイルの完全にランダムな行にアクセスし、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);
}
4

1 に答える 1

3

最も簡単な解決策は、ファイル全体を1行ずつ(を使用してgetline)読み込むことvector<string>です。次に、そのベクトルからランダムな要素を選択するのは簡単です。

次のように、入力ストリームから行を読み取ることができます。

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それ以外の場合は、範囲をカバーするために複数の呼び出しを組み合わせる必要があります。

于 2012-12-19T03:13:31.460 に答える