Безымянные входные строковые потоки

   
На этом шаге мы рассмотрим создание и использование безымянных строковых потоков.

   
Конструктор класса istrstream позволяет создавать и связывать с заданной областью памяти безымянные входные строковые потоки.
Например, чтение информации, переданной при запуске функции main() в командной строке, обеспечит следующая программа:

//OOР14_1.СРР  -  безымянный входной  строковый поток;   чтение
//	данных  с помощью операции извлечения >>.
#include <strstrea.h>
void main(int Narg, char *arg[])
{
  char path [80] ;
  // Чтение из  безымянного потока:
  istrstream(arg[0])  >> path;
  cout <<  "\nПолное имя программы: \n"  << path <<  endl;
}

Текст этой программы можно взять здесь.

   
Результат выполнения программы, например, такой:

    Полное имя программы: D:\WWP\TESTPROG\OOP14_1.EXE

   
По соглашениям языка и операционной системы arg[0] всегда содержит полное наименование программы с указанием диска
и полного пути к каталогу, где находится ЕХЕ-файл. Вызов конструктора istrstream(arg[0]) создает безымянный объект -
входной строковый поток, связанный с символьным массивом, адрес которого передается как значение указателя arg[0].
К этому потоку применима операция извлечения >>, с помощью которой полное наименование программы переносится в виде строки
из arg[0] в символьный массив path[].

   
В следующей программе с одним и тем же участком памяти (строка, адресуемая указателем line) последовательно связываются
три безымянных входных строковых потока.

//OOР14_2.СРР  - чтение из  безымянных строковых потоков.
#include <strstrea.h>
void main ()
{ 
  char *line = "000  111  \t222\n333\t444  555";
  char array[80]; // Вспомогательный массив/
  // Чтение из безымянного потока до пробела:
  istrstream (line) >> array;
  cout << " \narray = " << array << endl ;
  //Повторное чтение из безымянного потока:
  istrstream(line) >> array;
  cout << "\narray = " << array << endl;
  // Вызов функции getline() для безымянного потока:
  istrstream(line).getline(array,sizeof(array) , '\0'); 
  cout << "array = " << array << endl;
}

Текст этой программы можно взять здесь.

   
Результат выполнения программы:

    array =  000	

    array =  000
    array =  000      111          222
    333      444      555

   
Из первого безымянного потока данные в массив array извлекаются (до первого пробела) операцией >>. Второй
безымянный поток связан с той же строкой. Из него в массив array снова с начала строки читается та же самая
информация. Третий безымянный поток читается с помощью функции getline(), которая полностью копирует
строку line в символьный массив array[]. Извлечение данных функцией getline() продолжается до появления
нулевого признака конца строки '\0'. Этот символ также переносится в массив array и служит признаком конца
созданной строки.

   
На следующем шаге мы рассмотрим выходные строковые потоки.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий