2013-03-04 4 views
0

다양한 양의 입력을 처리하려면 프로그램을 포맷해야합니다. 변수에 의해 입력의 행 수가 알려지지 않음을 의미합니다. 입력은 다음과 같이 전달한다C++ : 가변 량의 입력을 문자 버퍼에 저장

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

int main(void) 
{ 
    char outputData[1024]; 

    cin.getline(outputData,1024); 

    cout << outputData; 

    return 0; 
} 

:

cat input | ./myProg 

나는 내 프로그램의 버전을 쓰고 성공적 입력 한 줄을 잡고, 저장을 숯불 버퍼로, 그리고 콘솔에 인쇄 나는이 프로그램을 일반화하여 다양한 수의 라인을 잡고 조작을 위해 하나의 큰 char 버퍼에 저장하는 데 도움이 필요합니다. 다음 코드를 작성했지만 콘솔에 정보를 인쇄하지는 않습니다.

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

int main(void) 
{  
    char outputData[1024]; 

    while(!cin.eof()) 
    { 
    cin.getline(outputData,1024); 
    } 

    cout << outputData; 

    return 0; 
} 
+2

의 http://en.cppreference.com/w/를 std::getline()을 사용하려면 cpp/container/vector) 또는 ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string)? –

답변

2

:-) 적은 코드에 그것을 감히 그것은 분명히 당신이 의도 한 것처럼 모든 라인을 출력하지 않을 것입니다.

가변 길이의 문자를 저장하려는 경우 어쨌든 std::string을 사용해야합니다. 현재 코드는 1024 자 이하의 행에서만 작동합니다. 임의의 수의 행을 저장하려면 모든 행을 하나의 큰 std :: string으로 연결하거나보다 쉬운 행 단위 액세스를 원하면 std::vector 문자열에 저장할 수 있습니다. std::string에 직접 읽고 C는 당신을위한 메모리 관리를 처리 ++하자 (방법 [`표준 : vector`]에 대해 대신 cin.getline()

#include <iostream> 
#include <string> 
#include <vector> 

int main() 
{ 
    std::string line; 
    std::vector<std::string> lines; 
    while (std::getline(std::cin, line)) { 
     lines.push_back(line); 
    } 

    // do something with lines, eg. print them by iterating through the vector 
    // and printing each string in it 
} 
+0

감사합니다. 이것은 매우 명확한 해결책입니다. –

2

문자열과 벡터를 사용하십시오. 누군가가 와서 IStream을 반복자와 서브 클래스 std::string을 제안하기 전에

#include <vector> 
#include <string> 
#include <iostream> 

std::vector<std::string> lines; 

for (std::string line; std::getline(std::cin, line);) 
{ 
    v.push_back(std::move(line)); 
} 

, 그래서, 당신은 버퍼의 내용 각 루프를 오버라이드 (override), 당신이 당신의 현재 솔루션에

+0

이렇게'std :: move()'를 사용해도 괜찮습니까? 내가 아는 한, 이동이 끝난 후, 구현은 옮겨진 변수가 재사용되지 않을 것이라고 가정하는 것이 자유 롭다. 그러나 여기서 그것은 각 입력 라인에서 다시 사용될 것이다. –

+1

@reko_t : 괜찮습니다. 객체는 이동 후에 유효한 상태입니다. –

+0

그래, 그냥 그것을 보니 그것은 괜찮아요, 분명히 주셔서 감사합니다 것 같습니다. :) –