在我的应用程序中,我正在接收std :: strings,如下所示
"12\tcout << \"Text\" << endl;\n"
(从gdb的机器界面输出)我想扩展控制字符,使字符串变为
12 cout << "Text" << endl;
除了通过char解析字符串char并用相应的漂亮打印序列替换每个字符序列之外,还有更好的方法吗?
答案 0 :(得分:2)
除了通过char解析字符串char并用相应的漂亮打印序列替换每个字符序列之外,还有更好的方法吗?
不,并且没有标准库的功能可以执行此操作,但如果有的话,它只会简单地用char解析字符串char。
std::string expand_tabs_and_escapes(std::string const& s, int tabstop=8) {
assert(tabstop >= 1);
std::string r;
for (std::string::const_iterator x = s.begin(); x != s.end(); ++x) {
switch (*x) {
case '\\':
if (++x == s.end()) handle_bad_escape();
else {
switch (*x) {
case 't':
goto tab;
case 'n':
r += '\n';
break;
// and so on for other escapes: \, ", r, v, f, etc.
default:
handle_bad_escape();
}
}
break;
case '\t':
tab:
r += std::string(tabstop - (r.size() % tabstop), ' ');
break;
default:
r += *x;
}
}
return r;
}
您也可以将其分解为expand_escapes,它将\ t转换为实际的选项卡,而expand_tabs则将所有选项卡转换为空格。虽然再次阅读,但看起来您的数据中没有转义符,例如“\\ t”,但实际的控制字符,所以您只需要上面的expand_tabs功能。
答案 1 :(得分:0)
您可以创建一个替换字符的正则表达式,尽管它取决于字符串的格式。否则它可能就像你自己建议的那样简单。