如何将 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? 所以你知道关键词“unes​​cape”。您是否尝试过搜索“如何在 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 转换为原始字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 std::string 转换为 WCHAR

如何将 std::string 转换为 int?

如何将 std::string 转换为字节 [关闭]

如何将 UCHAR 虚拟键代码转换为 std::string [重复]

如何将 std::string 转换为 C 风格的字符串 [重复]

将 System::String^ (C# 字符串)转换为 C++ std::string [重复]