C++ Программирование в среде С++ Builder 5

Чтение символов и строк


Для чтения одиночных символов, а также строк применяется функция get класса istream. Эта функция перегружена следующим образом:

int get () ;

istream &get(char &c) ;

istream &get(char *buf, long len, char t = '\n');

Две первые формы функции предназначены для извлечения из потока одиночного символа. Функция int get() возвращает символ в качестве своего значения. Функция get (char &c) передает символ в параметре и возвращает ссылку на свой поток.

Вот, например, как можно было бы выполнить посимвольное копирование файлов:

ifstream ifs("infile.dat");

ofstream ofs("outfile.dat");

while (ifs & ofs)

ofs.put(ifs.get());

// put (char) передает в поток

// одиночный символ.

Последняя форма функции get () извлекает из потока последовательность символов. Символы читаются в буфер buf, пока не произойдет одно из следующих событий:



  • будет встречен ограничивающий символ t (по умолчанию ' \n ');
  • будет встречен конец файла;
  • в буфер будет записано len символов, включая завершающий строку 0. Имеется еще функция getline(), во всем аналогичная этой форме
  • get ():

    istream Sgetline(char *buf, long len, char t = '\n');

    Разница между этими двумя функциями состоит в том, что get line () извлекает из потока ограничивающий символ, в то время как get () этого не делает. Ни та, ни другая функция не записывает ограничивающий символ в буфер.

    Пример использования getline () вы уже видели в листинге 9.4. Вот небольшой пример чтения строк с помощью get ():

    #inciude <iostream.h>

    int main(void) {

    char name[9], ext[4];

    cout << "Enter a filename with extension: ";

    cin.get(name, 9, '.');

    cin.ignore (80, '.'); // Удалить все оставшиеся

    // до точки символы. cin.get(ext, 4) ;

    cin.ignore(80, '\n'); // Удалить все, что осталось

    // в строке.

    cout<< "Name: "<< name << "; extension: " << ext << endl;

    return 0;

    }

    Эта программа, как нетрудно догадаться, усекает произвольное имя файла до формата 8.3.



    Содержание раздела