Вы можете сделать это, разделив либо один символ, либо последовательность символов в пределах <
и >
, используя опцию 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
)
Вы ouput streambuf istream.
Например, для вывода ifstream в суд:
std::ifstream f("whatever");
std::cout << f.rdbuf();
Править: Я предполагаю, что Вы хотите скопировать все содержание потока и не только единственное значение. Если Вы только хотите считать отдельное слово, проверьте ответ 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;
препятствовать тому, чтобы пробел исчез. Отметьте однако, что, если Ваш поток является двоичным файлом, некоторые другие символы могут быть ударены >>
и <<
операторы.
Необходимо считать из него и затем произвести то, что Вы читаете:
istream stm;
string str;
stm >> str;
cout << str;
Это распечатает целый поток, 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;