2012-12-19 2 views
2

작은 텍스트 파일의 무작위 라인에 액세스하고 다른 라인에서 같은 라인을 가져 오기를 원합니다 C++ 프로그램의 텍스트 파일 이 작업을 상당히 간단하게 처리 할 필요가 있습니다. 저는 C++ 프로그래밍의 초보자입니다. main.cpp이 포함됩니다. .cpp 또는 .h이 필요하면 알려주세요. 나는 게시 할 것입니다.작은 텍스트 파일의 무작위 라인에 액세스하고 C++의 다른 텍스트 파일에서 같은 라인을 가져와야합니다.

하여 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); 
} 
+3

무엇이 문제입니까? –

+0

@RyanGuthrie 텍스트 파일의 무작위 라인에 어떻게 액세스하고 라인 번호와 문자열을 읽는가? – Noah1111

답변

3

가장 쉬운 해결책은 vector<string>로 (getline 사용) 라인으로 전체 파일 라인을 읽을 수있을 것이다. 그런 다음 해당 벡터에서 임의의 요소를 선택하는 것은 간단합니다.

는이 같은 입력 스트림에서 한 줄을 읽을 수 있습니다

string line; 
getline(inputFile, line); 

그것은 오류가 직접 테스트 할 수 스트림에 대한 참조를 반환합니다. 그래서이 쉽게 다음과 같이 루프로 전환된다

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

지금 당신이 읽고 얼마나 많은 라인을 결정하기 위해 vectorsize 기능을 사용하고 임의의 하나를 선택할 수 있습니다.

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

은 물론, 당신은 당신의 파일 미만 RAND_MAX 라인이있을 것이라는 점을 알 필요가있다. 그렇지 않으면 범위를 커버하기 위해 rand에 여러 통화를 결합해야합니다.

+0

정확히 어떻게 할 것입니까, 코드 예제를 제공 할 수 있습니까? 감사합니다 – Noah1111

+0

격차를 제공하기 위해 편집했습니다. 내가 당신을 위해 당신의 숙제를하고있는 것처럼 느껴진다 ;-) 사실, 그것은 그렇게 많이 느낀다. – paddy

+0

고맙습니다. 나는 그 아이디어를 밖으로 시도 할 것이다. – Noah1111

관련 문제