【发布时间】:2012-01-17 12:32:49
【问题描述】:
struct T
{
void eat(std::string const& segment)
{
buffer << segment;
std::string sentence;
while (std::getline(buffer, sentence))
std::cout << "[" << sentence.size() << "]";
}
std::stringstream buffer;
};
int main() {
T t;
t.eat("A\r\nB\nC\nD");
// ^^ ^ ^ ^
}
// Actual output: [2][1][1][1]
// Desired output: [1][1][1][1]
我希望 std::stringstream 为我删除回车(并且不希望复制和修改 segment)。
我该怎么办?我本以为无论如何都会发生这种情况,在 Linux 上,对于文本模式的流......但也许这种机制在 file 流的逻辑中。
【问题讨论】:
-
我想我可以一次只输入一个角色,而忽略
\r。我 cba 对其进行基准测试,但我想知道这样做是否会失去任何速度。 -
您可以使用修改后的 getline 函数,如 this question 中的函数。
-
在
eaten的字符串中是否可能存在其他空格? -
@hmjd:通常不会,但我对此没有足够的信心聘请
std::skipws。 -
std::skipws不是解决方案,因为它只会删除前导空格(Windows 中的 '\015' 通常会显示为尾随),并且会被getline等未格式化的输入函数忽略.
标签: c++ iostream line-endings