2017-05-04 4 views
0

Linux/Mint의 txt 파일에서 입력 데이터를 가져 오려고합니다. 따라서 코드를 컴파일 한 후 다음 명령을 실행하십시오. ./a.out output.txt 2 차원 배열을 채울 필요가 있지만 들쭉날쭉 한 배열 (각 행에있는 열의 수가 다릅니다)처럼 작성해야합니다. 그래서 파일에서 읽은 내용을 문자로 나눠서 나누고 싶습니다. 문자가 '\ n'이면 두 번째 줄을 채우고 싶습니다. 하지만 '\ n'문자는 읽을 수 없다고 생각합니다. 문제를 설명 할 수 있기를 바랍니다. 코드를 작성 중입니다. 아마도 더 명확 해집니다.입력 파일에서 ' n'문자를 가져 오는 방법은 무엇입니까?

내 input.txt를 파일은 다음과 같습니다

for (int i = 0; i<n; i++) { 
    char ch; 
    cin >> ch; 
    int j = 0; 
    while (ch != '\n') { 
     arr[i][j] = ch; 
     cin >> ch; 
     j++; 
    } 
} 

문자가있는 경우 나, 그 원하는가 '\ n을 동일 :

enter image description here

내 C++ 코드 부분은 점점 입력입니다 '그 다음 프로그램은 배열을 다음 열로 채 웁니다. 당신이 cin >> ch을 수행 할 때

arr[0][0] = 'a'; 
arr[0][1] = 'f' 
arr[0][2] = 'h' 

arr[1][0] = 'b' 
arr[1][1] = 'e' 
arr[1][2] = 'g' 

arr[2][0] = 'c' .......) 
+0

['getline'] (http://www.cplusplus.com/reference/istream/istream/getline/) 라인 – user463035818

+0

하지 말까지 읽 아마,이 벡터를 사용하는 것이 좋을 것이다 당신이 원하는 것을 너무 명확하게하지만, 왜 std :: get()을 사용하지 않을까요? –

+0

'std :: cin' 대신에'std :: ifstream'을 사용하여 텍스트 파일을 입력 할 것을 강력히 권장합니다. 앞에서 언급했듯이 getline은 입력 파일을 읽는 좋은 선택입니다. – EuGENE

답변

1

은 공백, 탭과 개행 문자가 포함 된 공백을 건너 뜁니다. 아마도 std::getline을 사용하여 전체 줄을 읽은 다음 각 줄을 개별적으로 처리해야합니다.

예를 들어

:

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    char ch; 
    std::string line; 
    int ln = 0; 
    while (getline(cin, line)) // read entire line 
    { 
     istringstream is; 
     is.str(line); 
     while (is >> ch) // now read individual chars from that line 
      cout << "line: " << ln << " char: " << ch << endl; 
     ln++; 
    } 
} 

그리고 루프는 다음과 같이해야한다 : 당신은 당신이 당신의 arr를 선언하는 방법에 대한 자세한 내용을 생략

std::string line; 
for (int i=0; i<n; ++i) 
{ 
    char ch; 
    if (!std::getline(cin, line)) 
     break; 
    std::istringstream is; 
    is.str(line); 
    for (int j=0; is >> ch; ++j) 
     arr[i][j] = ch; 
} 

하지만 코드처럼 보이지 않는다 당신 표시된대로 제대로 처리 할 수 ​​있습니다.

std::vector<std::vector<char> > arr; 
std::string line; 
char ch; 
while (std::getline(cin, line)) // cin should probably be replaced with ifstream 
{ 
    std::istringstream is; 
    is.str(line); 
    arr.push_back(vector<char>()); 
    for (int j=0; is >> ch; ++j) 
     arr.back().push_back(ch); 
} 
+0

@Bob__ 예, OP는 가변 길이 배열에 대한 부분을 생략했으며, 문제는 "톱니 모양의 배열"을 수행하는 방법에 관한 것이 아니라 문자를 읽는 방법과 새로운 줄을 만났을 때를 알기 때문에 작동한다고 가정합니다. 처음에는'arr' 정의를 보여 주겠다고 말하고 싶었지만 입력을 처리하는 것이 대부분이었습니다. – Pavel

관련 문제