【问题标题】:How can I get double quotes into a string literal?如何将双引号放入字符串文字中?
【发布时间】:2012-09-02 13:26:20
【问题描述】:

我使用printf() 语句创建了以下输出:

printf("She said time flies like an arrow, but fruit flies like a banana.");

但我想把实际的引号放在双引号中,所以输出是

她说“时光如箭,果蝇如香蕉”。

不干扰用于在printf() 语句中包装字符串文字的双引号。

我该怎么做?

【问题讨论】:

  • 哈,双关语加 1!

标签: c++ c string escaping string-literals


【解决方案1】:

用反斜杠转义引号:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

您可以在字符串文字中使用特殊的escape characters,它们用前导反斜杠表示。

【讨论】:

    【解决方案2】:

    谢天谢地,在 C++11 中,还有更令人愉悦的使用原始字符串文字的方法。

    printf("She said \"time flies like an arrow, but fruit flies like a banana\".");
    

    变成:

    printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)");
    

    关于在开始引号之后和结束引号之前添加括号,请注意它们几乎可以是最多 16 个字符的任意组合,有助于避免组合出现在字符串本身中的情况。具体来说:

    基本源字符集的任何成员,除了:空格,左边 括号 (, 右括号)、反斜杠和 代表水平制表符、垂直制表符、表格的控制字符 提要和换行”(N3936 §2.14.5 [lex.string] 语法)和“最多 16 个字符”(§2.14.5/2)

    它使这个短字符串更清晰多少可能值得商榷,但当用于 HTML 或 JSON 等较长格式的字符串时,它无疑会更清晰。

    【讨论】:

    • 好吧...my_json << R"("value":")" << string_value << R"(")"; 甚至只是R"("value":"value1")" - 我希望 JSON 处理能有更易读的东西:)
    • 是的,进一步澄清说,在那种情况下,它并不太清楚。 (对于它的价值,您的示例 sn-p 是不正确的,这在一定程度上证明了您的观点!)
    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多