2013-08-12 4 views
0

저는이 작업의 초기 단계에서 정말 어려움을 겪고 있습니다. 사용자가 명령 줄에 텍스트 파일의 이름을 입력하게해야합니다. 파일은 공백으로 구분 된 정수의 목록입니다. 숫자를 거쳐 2D 배열이나 벡터에 입력하고 싶습니다. 이것은 항상 정사각형 차원 배열이 될 것이므로 100 개의 숫자가 있다면 10X10을 할 수 있습니다. 저는 거의 (1 차원) 배열에 익숙합니다 (거의 2 개월 초보자를위한). 그러나 이것의 텍스트 파일 측면에서 입력을 얻는 것과 정말로 혼란 스럽습니다. 내가 익숙하지 않은 주요 부분은 텍스트 파일과 동적 배열에서 읽는 것입니다. (런타임까지는 크기를 알 수 없으므로 여기에서 getline을 사용합니다.)C++ 텍스트 파일을 읽고 2D 배열에 숫자를 입력하십시오.

+1

[fopen] (http://www.cplusplus.com/reference/cstdio/fopen/) 및 [fread] (http://www.cplusplus.com/reference/cstdio/fread/)에서 살펴보십시오. 파일에서 입력을 처리하는 방법을 배우십시오. – torak

+0

@torak 틀린 언어? –

+0

@ChristianRau C++에서 fopen과 fread를 사용할 수 있습니다. –

답변

2

C++은 기본적으로 크기가 조정되는 벡터를 지원하고 그래서 당신은 임의의 크기의 "배열"을 가질 수 있습니다. 각 행을 읽고 벡터를 만들려면 getline을 사용하십시오. 012stream을 사용하여 파일을 열 수 있습니다 : ifstream fileToRead("file.txt"); 그리고 나서 fileToRead에서 읽을 수 있습니다.

: 그것은 CIN처럼

우리에 의해 이차원 어레이를 선언 할 0

vector< vector<int> > SquareArray; 

그리고 파일을 읽고 입력 할 수 있습니다.

for (int i = 0; i < N; ++i) 
{ 
    vector<int> row; 
    for (int j = 0; j < N; ++j) 
    { 
     //same limit because its square 
     int readFromFile = 0; 
     fileStream >> readFromFile; 
     row.push_back(readFromFile); 
    } 
    SquareArray.push_back(row); //copies row into SquareArray 
} 
+0

N은 무엇인지 어떻게 알 수 있습니까? 당신이 그들 모두를 통과 할 때까지 얼마나 많은 숫자가 있는지 모른다면? – Marla

+0

@Marla 무엇? N은 임의의 숫자입니다. N은 배열의 길이라고 어디에서 말하지 않았다. –

0

첫째, 텍스트 파일을 엽니 다

std::ifstream in("in.txt"); 

그런 다음 파일에서 각 행을 얻기 위해, 우리는 getline를 사용합니다. 또한 줄의 내용을 담을 문자열이 필요합니다. 이는 <string> 헤더에 포함되어 있습니다.

#include <string> 

우리는 또한 우리가 파일의 끝에 도달 할 때까지 각 라인을 읽는 계속해야합니다, 그래서 우리는 반복 메커니즘이 필요합니다.

std::string str; 
while (std::getline(in, str)) 

getline 반환 입력을 읽을 때 에러가 발생할 경우 해당 기본 비트 마스크에 설정된 비트를 가질 것이다 스트림 파일을 예를 들면. 그것이 루핑이 작동하는 방법입니다.

문자열 내부에 문자열을 저장하고 벡터에 전달해야합니다. 이런 식으로 뭔가 : 위의 코드에 대한

std::vector<std::vector<int>> orig(10, std::vector<int>(10)); // Your original 2D array 

int i = 0; 
while (std::getline(in, str)) 
{ 
    std::stringstream ss(str); 
    std::vector<int>& v = orig[i]; 

    std::copy(std::istream_iterator<int>(ss), 
       std::istream_iterator<int>(), std::back_inserter(v)); 

    ++i; 
} 

, 당신은 <iterator><algorithm> 헤더를해야 할 것입니다.

관련 문제