gpt4 book ai didi

c++ - 扩展字符串中的控制字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:09 24 4
gpt4 key购买 nike

在我的应用程序中,我收到如下所示的 std::strings

"12\tcout << \"Text\" << endl;\n"

(它是 gdb 机器界面的输出)我想扩展控制字符,使字符串变成

12    cout << "Text" << endl;

除了按 char 解析字符串 char 并将每个字符序列替换为相应的 pretty-print 序列之外,还有其他更好的方法吗?

最佳答案

Is there some better way to do this other than parsing the string char by char and replacing each character sequence by the corresponding pretty-printed sequence?

不,标准库中没有执行此操作的功能,但如果有的话,它只会逐个字符地解析字符串。

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 和 expand_tabs,前者将\t 变成实际的制表符,后者将所有制表符变为空格。虽然再次阅读,但看起来您的数据中没有转义符,例如“\\t”,而是实际的控制字符,因此您只需要上面的 expand_tabs 功能。

关于c++ - 扩展字符串中的控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5062236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com