我正在努力解决以下问题:我正在从XML文件中读取以下std :: stringstream
"sigma=0\nreset"
在将一些复制和处理写入文本文件之后。我希望以下
sigma=0
reset
但遗憾的是我只能
sigma=0\nreset
但是直接流式传输
out << "sigma=0\nreset"
我明白了:
sigma=0
reset
我目前怀疑“复制和处理”期间“\ n”的某些限定符会丢失......这可能吗?如何在流中追踪不再是换行符的“\ n”?
谢谢!
答案 0 :(得分:3)
这是因为输出函数不处理像'\n'
那样的转义序列,它是编译器所做的,然后只用于文字。编译器对字符串的内容一无所知,因此在字符串内部不能将"\n"
转换为换行符。
您必须解析字符串本身,并在适当时写出换行符。
答案 1 :(得分:1)
假设std::stringstream
实际上包含的文字等同于文字"sigma=0\\nreset"
(长度= 14个字符)而不是"sigma=0\nreset"
(长度= 13个字符),则必须更换它自己。这样做并不是很困难,要么使用提升replace_all
(http://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"
,请发布执行复制/处理和写入文本文件的代码。