我有一个程序往往会不时输出控制字符,我希望它们以插入符号打印并用蓝色着色(如vim
)。现在,我使用一个函数为我能想到的每个控制字符调用boost::algorithm::replace_all()
(^A
到^Z
,再加上^@
和其他一些控制字符,在打印前的字符串。
有更好的方法吗?我目前的解决方案看起来很麻烦,容易出错。
答案 0 :(得分:1)
这是一个解决方案(可能不是最优雅的):
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
) ,它可能还可以打印它们。