2012-09-08 3 views
0

나는 쇼 이름과 주인공이 포함 된 텍스트 파일을 가지고 있습니다.벡터가 특정 행을 읽습니다.

나는 액터에 입력 할 수있는 클래스에서 벡터를 만들어야 영화를 출력 할 수 있습니다.

하지만이 전체 항목을 벡터로 저장하여 메모리를 절약하고 싶지는 않습니다.

내가 어떻게하면이 아래에 포함 된이 txt 파일을 읽고 나서 액터 이름을 찾을 수 있습니까? Min, Jun So 두 인스턴스를 모두 찾은 다음 벡터로 두 영화를 읽고 출력합니다.

아마 이런 일을하는 코드의 레이아웃은 대단 할 것입니다. 나를 시작하게하려고.

Min, Elia 
    Starlight Inn (2010) [Skyler] <4> 

Min, Jun So 
    "Joseon X-Files - Secret Book" (2010) {Ghosts of Yidu (#1.6)} [Choi Eui Shin] <5> 

Min, Jung So 
    "Mischievous Kiss" (2010) [Oh Ha Ni] 

Min, Xiao 
    Little Sister (2010) [Mei Mei] <2> 
+0

있습니까 ? 파일을 반복하여 그 행을 즉시 찾을 수 있습니다. 이 질문이 [귀하의 마지막 질문]과 어떤 관련이 있는지 설명 할 수 있습니다 (http://stackoverflow.com/questions/12327239/ifstream-best-way-to-read-without-memory-usage). – Beta

+0

Im 코드를 작성하는 방법을 모르겠습니다. 그게 내 문제 야. – mystycs

+0

파일 크기는 얼마나됩니까? 파일을 스캔하는 것은 모든 이름을'std :: map'에 넣고 검색하는 것보다 느리다. – nneonneo

답변

1

은 THS 샘플 코드를보십시오 :

#include <string> 
#include <iostream> 
#include <fstream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    std::ifstream file("test.txt") ; 
    std::string search_str = "Elia" ; 
    std::string line ; 
    int line_number = 0 ; 
    std::vector<string> finds; 
    finds.resize(100); 

    while(std::getline(file, line)) 
    { 
     ++line_number ; 
     if(line.find(search_str) != std::string::npos) 
     { 
      std::cout << "line " << line_number << ": " << line << '\n' ; 
      finds.push_back(line); 
      std::getline(file, line); 
      finds.push_back(line); 
     } 
    } 

    for (int i=0;i<finds.size();i++) 
    { 
     std::cout<<finds[i]<<"\n"; 
    } 

    return 0; 
} 

입력 : Elia

출력 : 당신은 당신이 원하는 라인을 따기 전에 전체 파일을 읽을 수 있는지

Min, Elia 
    Starlight Inn (2010) [Skyler] <4> 
Press any key to continue 
+0

와우, 이걸 보게 해주셔서 고맙습니다. – mystycs

+1

왜'finds.resize (100)'입니까? 아마 당신은'finds.reserve (100)'을 의미했을까요? – john

+0

resize()는 메모리를 할당하고 원하는 But reserve()가 메모리를 할당하는만큼 인스턴스를 생성하지만 인스턴스를 생성하지 않습니다. –

관련 문제