我试图创建一个可以动态形成转义序列字符的程序。 请看下面的代码。
void ofApp::keyPressed(int key){
string escapeSeq;
escapeSeq.push_back('\\');
escapeSeq.push_back((char)key);
string text = "Hello" + escapeSeq + "World";
cout << text << endl;
}
例如,如果我按下&#39; n&#39;关键,我希望打印出来
您好
世界
但它确实打印出
您好\ nWorld
如何让程序运作?提前谢谢!
答案 0 :(得分:5)
您必须创建并维护一个查找表,该表将转义序列映射到它们的实际字符代码。
字符串文字中的转义序列在编译时由编译器进行评估。因此,尽量使用代码,尝试在运行时创建它们,不会产生任何效率。所以你别无选择,只能采取以下措施:
void ofApp::keyPressed(int key){
string escapeSeq;
switch (key) {
case 'n':
escapeSeq.push_back('\n');
break;
case 'r':
escapeSeq.push_back('\r');
break;
// Try to think of every escape sequence you wish to support
// (there aren't really that many of them), and handle them
// in the same fashion.
default:
// Unknown sequence. Your original code would be as good
// of a guess, as to what to do, as anything else...
escapeSeq.push_back('\\');
escapeSeq.push_back((char)key);
}
string text = "Hello" + escapeSeq + "World";
cout << text << endl;
}
答案 1 :(得分:3)
您必须自己编写这样一个动态转义字符解析器。这是一个非常简单的版本:
char escape(char c)
{
switch (c) {
case 'b': return '\b';
case 't': return '\t';
case 'n': return '\n';
case 'f': return '\f';
case 'r': return '\r';
// Add more cases here
default: // perform some error handling
}