時々制御文字を出力するプログラムがありますが、キャレット記法で印刷し、青色(のようにvim
)にしたいと思います。今のところ、文字列を印刷する前に、boost::algorithm::replace_all()
考えられる各制御文字(^A
から^Z
、プラス^@
、およびその他のいくつか)を呼び出す関数を使用しています。
これを行うためのより良い方法はありますか?私の現在の解決策は回避策であり、エラーが発生しやすいようです。
時々制御文字を出力するプログラムがありますが、キャレット記法で印刷し、青色(のようにvim
)にしたいと思います。今のところ、文字列を印刷する前に、boost::algorithm::replace_all()
考えられる各制御文字(^A
から^Z
、プラス^@
、およびその他のいくつか)を呼び出す関数を使用しています。
これを行うためのより良い方法はありますか?私の現在の解決策は回避策であり、エラーが発生しやすいようです。
これが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;
}
【デモ】
これは青で着色された部分を処理しませんが、その方法をすでに知っているようですね?
ちなみに、タブと改行は技術的には制御文字 (それぞれと) ですが、おそらくそれらを印刷しても問題ないので、 のif(c < ' ')
ようなものに変更したい場合があります。if(c < ' ' && c != '\t' && c != '\n')
^I
^J