c++ - 如何以可读格式打印控制字符?

标签 c++ string formatting escaping

我有一个程序会不时地输出控制字符,我希望它们以脱字符号打印并以蓝色着色(如 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/

相关文章:

c++ - int 数组还是 vector 数组?

C++ 策略设计模式,制作接口(interface)数组

java - 两次检查列表中的字符串是否包含来自不同列表的字符串的一部分,并在处理列表后返回唯一列表

c# - 为什么这个无效的文件路径//有效?

algorithm - 使用 "most appropriate"kilo/mega/etc 乘数打印整数

C++ 二维数组用文件中的最后一个元素值填充所有元素

C++检查从文件中读取的最后一件事是否是数字

python - 使用 Python 2.7 使用十六进制符号对字符串中的特定字符进行编码/解码

Javascript 等价于 python 的 .format()

Excel 整数到 bool 条件