当前位置:  开发笔记 > 编程语言 > 正文

如何将整个istream打印到标准输出和字符串

如何解决《如何将整个istream打印到标准输出和字符串》经验,为你挑选了3个好方法。

如何将istream变量打印到标准输出.[编辑]我正在尝试调试我需要将istream输出到日志文件的场景



1> Éric Malenfa..:

你输出了istream的streambuf.

例如,要将ifstream输出到cout:

std::ifstream f("whatever");
std::cout << f.rdbuf();



2> jalf..:

编辑:我假设您要复制流的全部内容,而不仅仅是单个值.如果您只想阅读一个单词,请检查1800的答案.


显而易见的解决方案是一次循环复制一个单词,但你可以做得更简单,作为一个很好的oneliner:

#include 
#include 

...

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

stream_iterators在内部使用operator <<和>>,这意味着它们将忽略空格.如果你想要一个精确的副本,你可以使用std :: istreambuf_iterator和std :: ostreambuf_iterator.它们处理底层(未格式化)的流缓冲区,因此它们不会跳过空格或转换换行符或任何内容.

您也可以使用:

 i >> std::noskipws;

防止空白消失.但请注意,如果您的流是二进制文件,则其他一些字符可能被>><<运算符破坏.



3> rlbond..:

这将打印整个流,一次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;

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有