2015-02-01 5 views
0

문자 사이에 공백이없는 9x8 텍스트 파일이 있습니다. 어떻게이 텍스트를 열고 그것을 읽고 문자를 가진 2 차원 벡터에 넣을 수 있습니까? 무엇 내가 지금까지있는 것은이 ... 나는 아직도 여전히 그것을 설정하는 방법을 알아 내려고 노력과 벡터텍스트 파일을 2 차원 벡터로 읽어들입니다. C++

+0

컴파일 타임에 알려진 고정 크기의 데이터가있는 경우 대신 ['std :: array'] (http://en.cppreference.com/w/cpp/container/array)를 사용해보십시오. 그리고 배열의 * 문자 * ** 또는 ** 배열 * 문자열 *이 필요합니다. 그리고 배열/벡터에 데이터를 추가하기 전에 루프를 정의하기 전에 이것을 정의해야합니다. –

+0

파일의 예를 들어주세요. – 0x499602D2

+0

......... ......... ....... ......... ......... .... .... X .... .... ..... ......... ......... ......... –

답변

0

에 파일을 추가 해요

#include <iostream> 
#include <fstream> 
std::ifstream in_str("inputtxt.txt"); 
std::string line; 
while (std::getline(in_str,line)) 
{} 
std::vector<std::vector<std::string>> replacements; 

어떻게 이런 일에 대해 :

std::array<std::array<char, 8>, 9> characters; 

std::string line; 
size_t pos = 0; 
while (std::getline(in_str, line)) 
{ 
    std::copy(std::begin(line), std::end(line), 
       std::begin(characters[pos++]); 
} 

이렇게하면 입력 파일의 행을 읽고 모든 문자를 배열에 복사합니다.

참고 : 위의 코드는 오류 처리가없는, 입력이 실제로 유효한되는, 그리고 가장 중요한 모두의 배열의 경계의 외출을 위해 어떤 검사를 없다 없음을 확인합니다. 예상보다 많은 입력 행이 있거나 예상보다 많은 행당 문자가있는 경우 이되고 undefined behavior이됩니다. 당신이 (물론 배열/벡터와 같은 배열 인덱싱 구문을 사용하여 액세스 할 수 있습니다) 문자열을 저장하는 행복 경우


또 다른 가능한 솔루션, 당신은 예를 들어, 할 수있는

std::array<std::string, 9> characters; 
std::copy(std::istream_iterator<std::string>(in_str), 
      std::istream_iterator<std::string>(), 
      std::begin(characters)); 

첫 번째 코드 샘플과 동일한 면책 조항도 여기에 적용됩니다.

관련 문제