为什么 std::istream_iterator 忽略换行符?
Why std::istream_iterator ignores newline characters?
我有以下代码:
#include <sstream>
#include <iterator>
#include <iostream>
int main()
{
std::stringstream str; str << "abcndef";
std::cout << "[" << str.str() << "]" << std::endl;
std::istream_iterator<char> it(str), end;
for (; it != end; ++it)
{
std::cout << "[" << unsigned(*it) << "]";
}
std::cout << std::endl;
return 0;
}
输出为:
[abc
def]
[97][98][99][100][101][102]
为什么 std::istream_iterator 忽略了换行符?
因为istream_iterator
使用operator>>
.istream::operator>>(char)
会跳过空格,除非您取消设置流的skipws
标志。(例如使用noskipws
)
这与执行此操作时获得的输出相同:
char c;
while (str >> c)
std::cout << "[" << unsigned(c) << "]";
您可以通过更改一点代码来禁用跳过输入中的任何空格:
std::stringstream str; str << std::noskipws << "abcndef";
新输出:
[abc
def]
[97][98][99][10][100][101][102]
改用std::istreambuf_iterator<char>
,它不会丢失空格和换行符。
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 提取后返回换行符的C++istream.get()
- 在 std::string 的末尾插入换行符
- 为什么 std::cout 在我的输出中添加返回或换行符
- 为什么 std::istream_iterator 忽略换行符?
- 编写一个简单的函数,其工作方式与"std::cout"类似,但在末尾添加换行符
- 在std::cout之后使用std::cin时,换行符从何而来
- 在 std::string 中每设置一个字母量添加一个换行符
- std::cout 不打印带有 endl 的值(换行符说明符)
- 我不想在使用 std::cin 后跳出换行符
- Std::cin::以及为什么保留换行符