我有一个程序会不时地输出控制字符,我希望它们以脱字符号打印并以蓝色着色(如 vim
)。现在,我使用一个函数为我能想到的每个控制字符调用 boost::algorithm::replace_all()
(^A
到 ^ Z
,加上 ^@
和其他一些),在打印之前放在字符串上。
有更好的方法吗?我当前的解决方案似乎是变通办法并且容易出错。
最佳答案
这是一个解决方案(可能不是最优雅的):
std::string escape_control_characters(const std::string & s)
{
std::string ret;
for(std::string::const_iterator iter = s.begin(); iter != s.end(); ++iter)
{
const char c = *iter;
if(c < ' ')
{
ret.push_back('^');
ret.push_back(c + '@');
}
else if(c == '\x7F')
ret.append("^?");
else
ret.push_back(c);
}
return ret;
}
[ demo ]
这不处理蓝色部分,但听起来您已经知道如何处理了?
顺便说一句,你可能想改变if(c < ' ')
类似于 if(c < ' ' && c != '\t' && c != '\n')
,因为虽然制表符和换行符在技术上是控制字符(分别为 ^I
和 ^J
),但它可能没问题。打印它们。
关于c++ - 如何以可读格式打印控制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617951/