我有以下代码:
#include <sstream>
#include <iterator>
#include <iostream>
int main()
{
std::stringstream str; str << "abc\ndef";
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;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
[abc
def]
[97][98][99][100][101][102]
Run Code Online (Sandbox Code Playgroud)
为什么std :: istream_iterator忽略了换行符呢?
因为istream_iterator用途operator>>.并istream::operator>>(char)跳过空白,除非你取消设置skipws流的标志.(例如使用noskipws)
如果您这样做,它将获得相同的输出:
char c;
while (str >> c)
std::cout << "[" << unsigned(c) << "]";
Run Code Online (Sandbox Code Playgroud)
您可以通过更改一些代码来禁用跳过输入中的任何空格:
std::stringstream str; str << std::noskipws << "abc\ndef";
Run Code Online (Sandbox Code Playgroud)
新输出:
[abc
def]
[97][98][99][10][100][101][102]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |