Язык программирования C++. Вводный курс


Читаем текстовый файл


Первая наша задача – прочитать текстовый файл, в котором будет производиться поиск. Нам нужно сохранить следующую информацию: само слово, номер строки и позицию в строке, где слово встречается.

Как получить одну строку текста? Стандартная библиотека предоставляет для этого функцию getline():

istream&

getline( istream &is, string str, char delimiter );

getline()берет из входного потока все символы, включая пробелы, и помещает их в объект типа string, до тех пор пока не встретится символ delimiter, не будет достигнут конец файла или количество полученных символов не станет равным величине, возвращаемой функцией-членом max_size()класса string.

Мы будем помещать каждую такую строку в вектор.

Мы вынесли код, читающий файл, в функцию, названную retrieve_text(). В объекте типа pair

дополнительно сохраняется размер и номер самой длинной строки. (Полный текст программы приводится в разделе 6.14.)

Вот реализация функции ввода файла:[15]

// возвращаемое значение - указатель на строковый вектор

vector<string,allocator>*

retrieve_text()

{

    string file_name;

 

    cout << "please enter file name: ";

    cin >> file_name;

 

    // откроем файл для ввода ...

    ifstream 1nfile( file_name.c_str(), ios::in );

    if ( ! infile ) {

        cerr << "oops! unable to open file "

             << file_name << " -- bailing out!\n";

        exit( -1 );

    }

    else cout << '\n';

 

    vector<string, allocator> *1ines_of_text =

        new vector<string, allocator>;

    string textime;

 

    typedef pair<string::size_type, int> stats;

    stats maxline;

    int   linenum = 0;

 

    while ( getline( infile, textline, '\n' )) {

        cout << "line read: " << textline << '\n';

 

        if ( maxline.first < textline.size() ) {

            maxline.first = textline.size() ;

            maxline.second = linenum;

        }

 

        1ines_of_text->push_back( textline );

        linenum++;

    }

 

    return lines_of_text;

<


Начало  Назад  Вперед