Для того, чтобы состыковать поток ввода с массивом, используется следующий конструктор класса istrstream:
istrstream istr (char *buf);
Здесь buf представляет собой указатель на массив, который будет использоваться как источник символов всякий раз при выполнении ввода из потока istr. Массив, на который указывает указатель buf, должен завершаться нулевым символом. Однако нулевой символ никогда не читается из массива.
Ниже приведен пример, использующий строку в качестве ввода:
#include <iostream.h>
#include <strstrea.h>
int main ()
{
char s[] = "One 2 3.00";
istrstream ins(s);
int i;
char str[80];
float f;
// чтение: one 2
ins >> str;
ins >> i;
cout << str << " " << i << endl;
// чтение 3.00
ins >> f;
cout << f << '\n';
return 0;
}
Если необходимо, чтобы только часть строки была использована для ввода, то надо применить следующую форму конструктора istrstream:
istrstream istr (char *buf, int size);
Здесь только первые size элементов массива будут использованы для ввода. Эта строка не обязательно должна оканчиваться нулевым символом, поскольку именно величина size определяет размер строки.
Состыкованный с памятью поток ведет себя точно так же, как потоки, состыкованные с устройствами. Например, следующая программа иллюстрирует способ, с помощью которого может быть прочитан текст, оканчивающийся нулевым символом в массиве. Когда достигается конец массива, поток ins принимает значение NULL.
/* данная программа показывает, как прочитать содержимое любого массива, оканчивающегося нулем */
#include <iostream.h>
#include <strstrea.h>
int main()
{
char s[] = "С++ arrays are fun! 123.23 0x23\n";
istrstream ins(s);
char ch;
// читает и выводит содержимое массива
ins.unsetf (ios::skipws); // не пропускать пробелы
while (ins) { // нуль в случае достижения конца массива
ins >> ch;
cout << ch;
}
return 0;
}