Программирование на C и C++

Онлайн справочник программиста на C и C++

Ввод из массива

Для того, чтобы состыковать поток ввода с массивом, используется следующий конструктор класса 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;
}