2013-06-07 3 views
0

입력 반복자와 출력 반복자를 사용하여 완성 될 때까지 입력 스트림을 읽는 함수를 작성해야합니다. (첫 번째 생각은 입력 스트림 반복자가 읽을 파일이 될 것이므로 끝날 것입니다. 파일 내용이 완전히 읽을 때), 함수가 리턴됩니다.입력 반복자를 반복하는 방법

텍스트 파일에서 읽은 문자는이 간단한 실험에서 stdout으로 출력됩니다. 반복자가 입력의 끝에 도달 할 때 방법) 입력을 통해

B를 반복 확인

A) :

내 문제는 내가하는 방법을 모르는 것입니다.

C) 오류가 발생한 경우.

#include <iostream> 
#include <fstream> 
#include <iterator> 


bool readTo(std::istream_iterator<char> iit, std::ostream_iterator<char> oit) 
{ 
    bool ret(false); 

    // how to check when end of input file? 

    // how to iterate through input 

    // how to check if an error? 

    char ch = *iit; 
    *oit++ = 'c'; 
    *oit++ = '='; 
    *oit++ = ch; 
    *oit++ = '\n'; 

    return ret; 
} 

int main() { 

    std::ifstream strm("test.txt"); 
    if(strm.good()) { 
     bool ret = readTo(strm, std::cout); 
     //I only want function to return when readTo read till end of input file 
    } 

    return 0; 
} 
+2

(1) 입력 반복자가 쌍으로 _ALWAYS_. (2)'ifstream'는 마술로'istream_iterator'로 변환하지 않습니다. (3) 할당이 'std :: copy'를 다시 쓰는 것과 같은 소리입니까? –

+0

http://ideone.com/m8ZpkF –

+1

입력을 통해 반복하는 방법을 알지 못한다고합니다. 어떤 소리를 반복하는 법을 모르겠습니다. 그러나 코드가 _output_을 분명히 반복하므로 반복하는 방법을 알고 있습니까? –

답변

1

내가 그것을했다 :

여기에 지금까지 내 코드입니다. 너무 추상적이어서 조금만 걸렸습니다.

std 라이브러리 반복자는 반복자에서 범위로 작동합니다. 유연성을 위해 vec.begin(), vec.end() 또는 일부 하위 집합과 같이 전체 컨테이너를 전달할 수 있습니다. 그러나 입력 반복자의 경우 어떻게해야할까요? 끝은 무엇입니까? 초기화되지 않은 반복자를 만듭니다. readTo에서 그런 예

std::ifstream strm("test.txt"); 
std::ifstream theend; 
if(strm.good()) { 
    bool ret = readTo(strm, theend, std::cout); 
} 

()이 작업을 수행 :

void readTo(std::istream_iterator<char> iit, std::istream_iterator<char> the_end, 
     std::ostream_iterator<char> oit) 

    while(iit != the_end) { 
    char ch = *iit; 
    *oit++ = 'c'; 
    *oit++ = '='; 
    *oit++ = ch; 
    *oit++ = '\n'; 
    iit++; 
    } 

또는 대안 :

void readTo(std::istream_iterator<char> iit, 
     std::string& replaced) 
{ 
    while(iit != std::istream_iterator<char>()) { 
     char ch = *iit++; 
     if(ch != '$') 
      replaced.push_back(ch); 
     else 
      break; 
    } 
} 
+0

'ch'를 사용하는 대신'* oit ++ = * it ++'이 될 수 있습니다. –

관련 문제