如何将 std::string 转换为原始字符串? [复制]
Posted
技术标签:
【中文标题】如何将 std::string 转换为原始字符串? [复制]【英文标题】:How to convert std::string to raw string? [duplicate] 【发布时间】:2021-10-26 14:06:34 【问题描述】:我有这个字符串:
std::string str = "t\tt\\";
我可以将str
转换为原始字符串,使其不等于"t. t \"
,而是等于"t\t\\"
(就像我写的R"t\t\\"
)?
如果我不使用 R 字面量,我的符号(如 \t
\n
\\
)将替换为制表符、换行符或 \
。我想将替换这些符号的字符串 var 转换为不替换它们的原始字符串。
那么,我可以将带转义的字符串转换为不转义的字符串吗?
【问题讨论】:
我不明白这个问题。"t. t \"
是 "t\t\\"
。你能说明你想如何使用这个字符串吗,因为我不清楚你真正想要做什么。
嗯,如果你的意思是在 c++ 中是否有一个字符串会输出“t\t\\”?那么代码应该是 std::string str = "t\\t\\\\"; (en.cppreference.com/w/cpp/language/escape)
@NathanOliver 已更新。
那么,您是否只是想将已经具有制表符/换行符/其他字符的std::string
实例转换为其转义序列?例如。包含选项卡的字符串应将其替换为 \t
?
所以你知道关键词“unescape”。您是否尝试过搜索“如何在 C++ 中取消转义字符串”? :) 你本可以在 45 分钟前收到answer。
【参考方案1】:
std::string str = "t\tt\\";
std::string::size_type pos = 0;
while ((pos = str.find_first_of("\t\n\\", pos)) != std::string::npos)
switch (str[pos])
case '\t':
str.replace(pos, 1, "\\t");
pos += 2;
break;
case '\n':
str.replace(pos, 1, "\\n");
pos += 2;
break;
case '\\':
str.replace(pos, 1, "\\\\");
pos += 2;
break;
Online Demo
【讨论】:
以上是关于如何将 std::string 转换为原始字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UCHAR 虚拟键代码转换为 std::string [重复]