Как распечатать весь istream к стандарту и строке

Вы можете сделать это, разделив либо один символ, либо последовательность символов в пределах < и >, используя опцию PREG_SPLIT_DELIM_CAPTURE для захвата каждого значения:

[ 110]

Вывод:

Array (
  [0] => M
  [1] => y
  [2] =>
  [3] => 
  [4] => t
  [5] => a
  [6] => b
  [7] => l
  [8] => e
  [9] => 
  [10] =>
  [11] => i
  [12] => n
  [13] => 
  [14] => b
  [15] => r
  [16] => o
  [17] => w
  [18] => n
  [19] =>
  [20] => 
[21] => [22] => H [23] => e [24] => l [25] => p )

Демо на 3v4l.org

18
задан kal 24 March 2009 в 02:56
поделиться

4 ответа

Вы ouput streambuf istream.

Например, для вывода ifstream в суд:

std::ifstream f("whatever");
std::cout << f.rdbuf();
22
ответ дан 30 November 2019 в 07:13
поделиться

Править: Я предполагаю, что Вы хотите скопировать все содержание потока и не только единственное значение. Если Вы только хотите считать отдельное слово, проверьте ответ 1800-х вместо этого.


Очевидным решением является цикл с условием продолжения, копируя слово за один раз, но можно сделать это более простой как хорошая острота:

#include <iostream>
#include <iterator>

...

std::istream i;
std::copy(std::istream_iterator<char>(i), std::istream_iterator<char>(), std::ostream_iterator<char>(std::cout));

stream_iterators используют оператор <<и>> внутренне, означая, что они проигнорируют пробел. Если Вы хотите точную копию, можно использовать станд.:: istreambuf_iterator и станд.:: ostreambuf_iterator вместо этого. Они работают над базовыми (бесформатными) потоковыми буферами, таким образом, они не пропустят пробел или преобразуют новые строки или что-либо.

Можно также использовать:

 i >> std::noskipws;

препятствовать тому, чтобы пробел исчез. Отметьте однако, что, если Ваш поток является двоичным файлом, некоторые другие символы могут быть ударены >> и << операторы.

12
ответ дан 30 November 2019 в 07:13
поделиться

Необходимо считать из него и затем произвести то, что Вы читаете:

istream stm;
string str;
stm >> str;
cout << str;
0
ответ дан 30 November 2019 в 07:13
поделиться

Это распечатает целый поток, 1 символ за один раз:

char c;
c = my_istream.get();
while (my_istream)
{
    std::cout << c;
    c = my_istream.get();
}

Это распечатает все это, но отбросит пробел:

std::string output;
while(my_istream >> output)
    std::cout << output;
5
ответ дан 30 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: