我们说我有一个名为test.txt
的文件,其中包含以下文字:
\u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is not creating
如果我想通过char
阅读它char
,它的外观如下:
ifstream file;
file.open("test.txt");
string line;
while (getline(file, line)){
cout << line<< endl; // prints \u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is not creating
}
但是,如果我在代码中声明了相同的字符串,则会检测到转义字符并将其打印出来。
string line2 ("\u003cdiv style=\"text-align: left;\" trbidi=\"on\"\u003e\nAppending is
cout << line2<< endl; // prints <div style="text-align: left;" trbidi="on">\n Appending is not creating
这是完全正常的,因为\
是C ++字符串的转义字符。
这提出了一个问题:是否可以使用第一个代码得到相同的结果(即,将每一行解释为代码2中定义的字符串)?
答案 0 :(得分:2)
STL类string
没有任何执行此操作的功能。您必须实现自己的函数才能将转义的字符表达式更改为正确的转义字符。这个函数看起来像这样:
string parse_escaped_characters(string s) {
string s2;
for (int i = 0; i < s.size(); ++i) {
if (s[i] == '\\') {
switch (s[i+1]) {
case 'n': s2 += '\n'; ++i; break;
case '\"': s2 += '\"'; ++i; break;
//and so on...
}
}
else s2 += s[i];
}
return s2;
}
或者您可以搜索库以处理包含此功能的字符串。