使用场景
- C++里测试路径需要转义,Windows复制路径里面的斜杠需要加斜杠,每次都需要操作比较麻烦,而且看着也不好看
- 换行,代码里有时候硬编码一些文本、数据,依赖""的自动拼接和行末的斜杠,需要手动写\r\n换行
C++ Raw string literal
以前用Lua,里有[[]]
,防止转义非常方便。
后来了解到Python也有r""
。
C++没怎么看到过这种用法,都是手动转义,突然想有没有这种特性,找了下C++还真有,C++11的新(误:老)特性。
https://en.cppreference.com/w/cpp/language/string_literal
prefix (optional)
R"d-char-sequence (optional)
(r-char-sequence (optional)
)d-char-sequence (optional)
"
普通字符串
const char* s0 = "Hello";
const char* s1 = "C:\\name\\a\\b\\c";
禁止转义、自动补充换行的字符串
const char* s0 = R"(C:\name\a\b\c)";
const char* s1 = R"(
C:\name\a\b\c
)";
C++中需要注意
\r\n
、\n
等在不同平台的影响,待补充……
定义中还有一部分是d-char-sequence
,这个部分既然可选,为什么需要它的存在呢,什么情况下需要写d-char-sequence
?
https://stackoverflow.com/questions/71550127/what-is-the-purpose-of-d-char-sequence-in-c-raw-strings
如果用户的字符串中包含默认的终止串)"
,则可以通过d-char-sequence
自定义起始终止串,比如可以定义为)mySequence"
,由使用的人保证字符串中不出现自定义终止串。
d-char-sequence
的最多16个字符,使用基础字符集的字符(不含小括号、斜杠\
、空格)。在字符串小括号前指定,结尾和开头一致。
// x)"x
const char* s1 = R"mySequence(x)"x)mySequence";
Lua
普通字符串
local str = "Hello"
local str2 = "C:\\name\\a\\b\\c"
禁止转义、自动补充换行的字符串
local rstr = [[C:\name\a\b\c]]
local rstr2 = [[
C:\name\a\b\c
]]
字符串中包含默认的终止串]]
,则自定义起始终止串,在两个中括号之间加n个=,起始和结束的=个数一致
local rsnconflict = [==[
C:\name\a\b\c]]
]==]
Python
https://docs.python.org/3.13/tutorial/introduction.html#strings
普通字符串(单引号、双引号)
str0 = "Hello"
str1 = 'Hello'
str2 = "C:\\name\\a\\b\\c"
禁止转义(r)可以换行(三引号)的字符串
# 双引号字符串中的单引号不用转义,反之亦然
str1 = "''"
str2 = '""'
# 换行
rstr = """
C:\\name\\a\\b\\c
"""
# 禁止转义
rstr = r"C:\name\a\b\c"
rstr1 = r'C:\name\a\b\c'
# 禁止转义且自动包含换行(末尾加\防止换行)
rstr2 = r"""
C:\name\a\b\c
no End\
"""
字符串中包含默认的终止串"""
或者'''
,可以用另一种引号代替。
如果两个都有,则可以用format或者+来拼接字符串,把和终止串一样的部分单独提出来,例子中把"""
提出来,用单引号扩起来表示后,再format到目标字符串中(没有找到python自定义起始字符串的方式orz)
# 如果字符串包含以下五种类型(想使用r防止转义)
# '
# "
# C:\name\a\b\c
# """
# '''
tmp = '"""'
rsnconflict = fr"""
'
"
C:\name\a\b\c
'''
{tmp}
"""
标签:name,sequence,Python,C++,转义,char,Lua,字符串
From: https://www.cnblogs.com/muke-l/p/17528275.html