2011-05-11 4 views
4

내 코드가 ifstream을 사용하여 파일을 읽고 구문을 분석하면 파일을 읽을 필요가 없습니다. 다른 곳에서 파일을 읽을 필요가 없으므로 대신 char *가 있습니다. ifstream ... ifstream.get()을 사용하는 곳에서 코드를 어떻게 바꿀 수 있습니까? 다시 감사합니다.C++ ifstream to char *

답변

8

char *std::stringstream에 넣기 만하면됩니다.

std::stringstream buffer(your_string); 

당신은 (당신이 열 수 없습니다 나 닫을) 그것이 std::ifstream이었다 거의 같은 buffer를 사용할 수 있습니다. 이상적으로, 당신의 구문 분석-방법은 매개 변수로 std::istream에 대한 참조를 취할 것, 그것은 상관 없어의 종류는 수신 입력 스트림 무엇 :

std::istream에서 모두 std::ifstreamstd::stringstream 상속 이후
void parse(std::istream & input); 

, 당신이 그들을 전달할 수 있습니다 파서가 수정없이 실행됩니다. 다른 사람이 말했듯이

+1

왜'stringstream'하고, 'istringstream' 아닌가요? 왜 그가 필요하지 않은 복잡성이 추가 되었습니까? –

+0

@James : 좋은 지적입니다. 'ostringstream' 또는'istringstream'만으로도'stringstream'을 항상 사용하는 것은 나에게 나쁜 습관이라고 생각합니다. –

+0

카우보이 감사합니다! 잘 작동하고 너무 많은 코드를 변경하지 않았습니다! – ghiboz

2
#include <sstream> 
#include <fstream> 
#include <iostream> 

using namespace std; 

void mung(istream & is) { 
    char c; 
    while(is >> c) { 
     cout << c << endl; 
    } 
} 

int main(int argc, char *argv[]) { 
    if (argc > 1) { 
     ifstream ifs(argv[1]); 
     mung(ifs); 
    } 
    else { 
     istringstream iss("here is some text to mung"); 
     mung(iss); 
    } 
} 
1

, 당신은 std::istringstream을 사용할 수 있지만,이 경우에는 나는 사용되지 않는 (그러나 항상 존재) std::istrstream을 선호하는 것입니다. 또는 는 단순히 imemorystreamomemorystream으로, 간단한 memory_streambuf를 만들 : 당신은 양방향이 될 필요가없는 경우,도 지원 추구의 memory_streambuf 항상 , 유용한 코드의 10 개 라인이다, 그리고 밖으로 잎 다른 솔루션의 복잡성이 많습니다. (만 이 선호된다 기존 솔루션을 사용, 물론, 한 번이 일을하고 있습니다.하지만 에서 다수의 경우 유용하게 memory_streambuf을 발견 한 경우.)

+0

관심사로서 왜 istrstream에 대한 선호도가 있습니까? –

+0

@unaperson 단순함. 어쩌면 버릇도 있지만,'char []'("char *"가 가리킨다)가 있다면,'istrstream'은 그것을 직접 사용할 수 있습니다. 'istringstream'은'string' 으로의 변환을 필요로합니다. 큰 문제는 아니며'istrstream'을 사용할 수 없다면'istringstream'을 사용할 것입니다. 그렇기 때문에 필요로하는 것을 정확히 할 수있는 스트림을 사용하지 않을까요? (출력을 위해, 차이가 더 중요합니다. 왜냐하면'ostrstream'이 멈추고 너무 많은 문자를 출력 할 때 오류를 선언하기 때문입니다.) –