2014-12-13 3 views
-2

텍스트 파일에서 공백으로 구분 된 공백을 읽는 데 도움이 필요합니다. 다음은 텍스트 파일의 예입니다 : "69 2 189 1876". int의 양이 알려져 있습니다 (이 예제에서는 4). 나는 인터넷 검색을 시도했지만 여전히 만족스러운 해결책을 찾지 못했습니다. 이것은 처음으로 파일 I/O를하는 것이므로 쉽게 따라하십시오. 읽기 값의 수 대신 당신은 표준 클래스 표준 : : 벡터를 사용할 수있는 배열의 다음 알 수없는 경우공백을 텍스트 파일에서 int 배열로 읽음 (C++)

const size_t N = 4; 
int a[N] = {}; 

std::ifstream in("YourTextFile"); 

size_t n = 0; 

while (n < N && in >> a[n]) ++n; 

: 사전 : 여기

+1

시도해 보셨습니까? 파일을 열어서 어딘가에서 숫자를 얻을 수 있습니까? (instacce의 문자열)? –

+0

당신은 시도를 보여줄 필요가 있습니다, 그러면 사람들은 당신이 만든 실수와 그것을 개선하는 방법을 당신에게 말할 것입니다. 하나의'int'를 읽는 법을 알고 그것을 다시 출력합니까? 'std :: Vector'에 대해 알고 있습니까? – BoBTFish

답변

0

감사는 가능한 방법을 표시됩니다. 이 파일은 벡터에 예약 된 요소의 최소 수를 포함 쇼 경우

std::ifstream in("YourTextFile"); 
std::vector<int> v; 

int num;  

while (in >> num) v.push_back(num); 

예를

를 들어 당신은 벡터에 대한 몇 가지 초기 메모리를 예약 할 수 있습니다. 예를

를 들어
v.reserve(4); 
+0

배열이 벡터가 아닌 배열에 저장하려고합니다. – user3789296

+0

@ user3789296 데이터 개수를 알고있는 경우 배열에 데이터를 저장하는 방법은 내 게시물에 작성되어 있습니다. –

3

그냥 std::copy를 사용

#include <algorithm> 
#include <fstream> 
#include <iterator> 
#include <vector> 

std::vector<int> array; 
std::ifstream stream("filename"); 
std::copy(std::istream_iterator<int>(stream), 
      std::istream_iterator<int>(), 
      std::back_inserter(array)); 

을 당신은 단지 첫 번째 N을 읽을 std::copy_n 대신 std::copy을 사용합니다.

+0

벡터! = 배열 ​​ – user3789296

+2

@ user3789296 벡터는 확실히 [배열] (http://en.wikipedia.org/wiki/Array_data_structure)입니다. 어떤 이유로 든'std :: vector'를 사용하고 싶지 않고 크기를 미리 알고 있다면'std :: array'를 사용하고'std : back_inserter (array)'대신 begin iterator를 전달할 수 있습니다. – rightfold

관련 문제