2016-09-08 3 views
1

저는 학교 프로젝트를 진행 중이며 파일의 텍스트를 읽어야합니다. c-string을 사용하여 .txt 파일을 읽는 방법?

내 교수가 프로젝트에 제한을 넣어 제외하고 쉬워요 소리 : NO STRINGS ("어떤 문자열 데이터 유형 또는 문자열 라이브러리는 허용되지 않습니다.") 내가이 문제를 해결지고있어

char 배열을 사용하여; 그러나 파일에서 문자 배열을 읽는 방법을 모르겠습니다.


이것은 문자열 파일 에서 읽는 방법에 다른 웹 사이트에서 이다.

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() { 
    string line; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (getline (myfile,line)) 
    { 
     cout << line << '\n'; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

중요한 선 여기 while (getline (myfile,line));

getline는 ifstream 및 문자열 (문자없는 배열)를 수용한다.

도움을 주시면 감사하겠습니다.

+0

을 당신이 필요로 할 결과이다 만약에 그냥 빈 문자열 ""나 아무것도에 부합하는 STRINGS, 하지만 출구? – vinllen

+0

@vinllen 여기서 규칙을 인용하겠습니다 : "문자열 데이터 유형이나 문자열 라이브러리가 허용되지 않습니다." –

+0

강사가 실제로 대문자로 쓰고'std :: vector'를 사용할 수 없다고 명시 적으로 밝히지 않으면'std :: vector'를 사용합니다. http://stackoverflow.com/questions/4761529/efficient-way-of-reading-a-file-into-an-stdvectorchar –

답변

4

cin.getline을 사용하십시오. 이 사이트의 형식은 cin.getline입니다.

당신은 다음처럼 작성할 수 있습니다

ifstream x("example.txt"); 
char arr[105]; 
while (x.getline(arr,100,'\n')){ 
    cout << arr << '\n'; 
} 
1

ifstream은 파일 내용을 char 배열로 읽는 방법이 get()입니다. get()은 매개 변수로 배열에 대한 포인터와 배열의 크기를 취합니다. 가능한 경우 배열을 지정된 크기까지 채 웁니다.

get()이 반환 된 후 gcount() 메서드를 사용하여 읽은 문자 수를 확인하십시오.

그런 다음 간단한 논리 루프를 사용하여 size -chunks의 파일 내용을 배열로 반복적으로 읽고 배열로 읽은 모든 청크를 하나의 배열 또는 std::vector으로 수집 할 수 있습니다.

0

당신은 텍스트 입력의 끝을 판단하기 위해 int i = 0; while (scanf("%c", &str[i ++]) != EOF)를 사용할 수 있습니다. str은 원하는 배열의 개행 문자 배열이고, i은 입력 크기입니다.

또한 C++ 스타일의 줄에 모든 루프를 읽을 while(cin.getline())를 사용할 수 있습니다 istream& getline (char* s, streamsize n, char delim); 단지 아래와 같이 :

const int SIZE = 100; 
const int MSIZE = 100; 
int main() { 
    freopen("in.txt", "r", stdin); 
    char str[SIZE][MSIZE]; 
    int i = -1; 
    while (cin.getline(str[++ i], MSIZE)) { 
     printf("input string is [%s]\n", str[i]); 
    }  
} 
+0

을 사용해야한다. 정확히'istream & getline (char * s, streamsize n, char delim); ? 조금 혼란 스럽네요 –

+0

답변이 이미 업데이트되었습니다. – vinllen