如何检测字符串中的转义
How to detect an escape in a string
我正在尝试做这样的事情:
#include <iostream>
std::string message = "Hellor"world"";
int main() {
if (message[5] == '') {
switch (message[6]) {
case 'r':
std::cout << "\r escape..." << std::endl;
break;
case '"':
std::cout << "" escape..." << std::endl;
break;
}
}
return 0;
}
我知道从逻辑上讲这是对的,但如果你理解我想做什么,你会注意到我想知道字符串上是否有转义。如果角色是转义,请执行您在上面看到的操作(开关)。
这可能吗?谢谢。
这
是不可能的。 在运行时,字符串中将包含以下字节:
- H
- e
- l
- l
- o
- CR(ASCII 字符 13)
- "(ASCII 字符 34)
- w
- o
- r
- l
- d
- "(ASCII 字符 34)
这个字符串常量碰巧是通过转义序列创建的,这一事实是完全不可逆转的,因为这只是创建上述字节的编译器简写。 内存中不存在反斜杠,因此在运行时无法检测这些转义序列。
当然,您可以查看字节 6 是 13,还是字节 7 是 34。
正如 Mike 所发布的那样,字符串转义是一种在编程语言中将不可打印字符键入字符串的方法。 转义本身实际上并不在带有的字符串中。
'n'
表示的字符是字符串中的内容。 因此,你想要这样的东西吗?
#include <iostream>
#include <cctype>
std::string message = "Hellor"world"";
int main() {
switch (message[5]) {
case '': std::cout << "\\ escape...n"; break;
case '"': std::cout << "\" escape...n"; break;
case ''': std::cout << "' escape...n"; break;
case '?': std::cout << "\? escape...n"; break;
case 'a': std::cout << "\a escape...n"; break;
case 'b': std::cout << "\b escape...n"; break;
case 'f': std::cout << "\f escape...n"; break;
case 'n': std::cout << "\n escape...n"; break;
case 'r': std::cout << "\r escape...n"; break;
case 't': std::cout << "\t escape...n"; break;
case 'v': std::cout << "\v escape...n"; break;
case ' ': std::cout << "\0 escape...n"; break;
default:
if (isprint(message[5]))
std::cout << message[5] << " is not an escape...n";
else {
std::cout << "\x";
std::cout << std::hex << ((unsigned char)message[5]);
std::cout << " escape...n" << std::dec;
}
break;
}
return 0;
}
还有其他具有值参数的转义,并且无法以任何方式检测到,因为它们不是唯一的。
These are all identical after compilation
" a" //raw ASCII
"n0n141" //octal - ASCII
"x0x61" //hexidecimal - ASCII
"u0061" //codepoint - UTF16
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何解释C++字符串中的 \u 转义码?
- PostgresSQL - SQL Ready 语句与字符串转义,防止 SQL 注入攻击
- 是否可以在原始字符串文本中插入转义序列?
- 转义std::字符串中的特殊字符
- 使变量字符串忽略转义序列
- 在字符串流的 SSH 命令中转义 bash 脚本中的引号
- 转义 R "()" 在 C++ 中的原始字符串中
- 将转义的 UTF-8 八位字节的字符数组转换为 C++ 的字符串
- 使用 RE2::全局替换的转义字符串
- c++ JsonCpp 解析带有转义引号作为数组的字符串
- 如何检测字符串中的转义
- 将带有转义字符的大字符串转换为字节数组
- 由转义字符组成的字符串文字的大小
- 没有数据库连接的字符串转义
- 以编程方式获取 C++ 中的转义字符串表示形式
- C++转义短语子字符串
- c++的简单JSON字符串转义
- c++编译器什么时候开始考虑在字符串转义中使用两个以上的十六进制数字?