2016-09-08 5 views
1

Я работаю над проектом для школы, и мне нужно прочитать текст из файла.Как читать .txt-файл с помощью c-строк?

Звучит просто Peasy, за исключением того, мой профессор поставил ограничение на проекте: 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

что результат вам нужно, если встречаются NO 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 имеет метод с именем get(), который считывает содержимое файла в массив char. get() принимает, как параметры, указатель на массив и размер массива; затем заполняет массив до заданного размера, если это возможно.

После возврата get() используйте метод gcount(), чтобы определить, сколько символов было прочитано.

Вы можете использовать то, и простую логическую петлю, чтобы повторно прочитать содержимое файла, в size -chunks, в массив, и собрать все куски чтения в один массив, или std::vector.

0

Вы можете использовать int i = 0; while (scanf("%c", &str[i ++]) != EOF) судить конец ввода текста. str - массив символов, включающий в себя новую строку, которую вы хотели, и размер i.

Вы также можете использовать while(cin.getline()) для чтения в каждой строке каждый цикл в стиле C++: 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);' go ? Я немного смущен –

+0

ответ обновлен уже – vinllen

Смежные вопросы