2

我正在努力解决以下问题:我正在从 XML 文件中读取以下 std::stringstream

"sigma=0\nreset"

经过一些复制和处理后,它被写入文本文件。我希望以下

sigma=0
reset

但遗憾的是我只得到

sigma=0\nreset

但是当我直接流式传输时

out << "sigma=0\nreset"

我得到:

sigma=0
reset

我目前怀疑在“复制和处理”期间丢失了“\n”的一些限定符......这可能吗?如何在不再是换行符的流中追踪“\n”?

谢谢!

4

2 回答 2

3

这是因为输出函数不处理转义序列,如'\n',它是编译器,然后只处理文字。编译器对字符串的内容一无所知,因此在字符串内部时无法转换"\n"为换行符。

您必须解析字符串本身,并在适当的时候写出换行符。

于 2013-04-11T15:09:58.410 回答
1

假设std::stringstream实际包含相当于文字"sigma=0\\nreset"(长度 = 14 个字符)而不是"sigma=0\nreset"(长度 = 13 个字符)的内容,您必须自己替换它。这样做不是很困难,要么使用boost replace_allhttp://www.boost.org/doc/libs/1_53_0/doc/html/boost/algorithm/replace_all.html),std::string::find要么std::string::replace

std::stringstream inStream;
inStream.str ("sigma=0\\nreset");
std::string content = inStream.str();

size_t index = content.find("\\n",0);

while(index != std::string::npos)
{
   content.replace(index, 2, "\n");
   index = content.find("\\n",index);
}

std::cout << content << '\n';

注意:您可能需要考虑系统行尾不是其他情况的情况"\n"

如果std::stringstream实际包含"sigma=0\nreset",请发布执行复制/处理和写入文本文件的代码。

于 2013-04-11T18:54:04.987 回答