【问题标题】:Separating a large string分离一个大字符串
【发布时间】:2009-06-03 17:02:13
【问题描述】:

这种话怎么说来着?

static const string message = "This is a message.\n
                               It continues in the next line"

问题是,下一行没有被识别为字符串的一部分..

如何解决这个问题?或者是创建字符串数组然后初始化数组以保存每一行的唯一解决方案?

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    用自己的引号将每一行括起来:

    static const string message = "This is a message.\n"
                                  "It continues in the next line";
    

    编译器会将它们组合成一个字符串。

    【讨论】:

    • 更准确地说,预处理器会。
    • @ephemient:实际上,不,预处理器不是执行此操作的层。您可以通过制作一个小应用程序并使用“gcc -E test.c”进行编译来自己测试它。这将输出预处理器的结果。你会发现字符串仍然是分开的。连接相邻字符串常量的是编译器本身而不是预处理器。
    • @ephemient:事实上,C99 标准在关于预处理器的部分中有一个注释:“148”请注意,相邻的字符串文字不会连接成单个字符串文字(参见 5.1 中的翻译阶段.1.2);因此,导致两个字符串文字的扩展是无效指令。"
    • 嗯,根据我的经验,一些cpp 实现会合并字符串...我猜它们不符合规范。
    【解决方案2】:

    您可以使用尾随斜杠或引用每一行,因此

    "This is a message.\n \
     It continues in the next line"
    

    "This is a message."
    "It continues in the next line"
    

    【讨论】:

    • 我一直使用第一种形式,但在缩进时插入的空白有问题...即如果该语句单独缩进 4 个空格,则字符串中间会有四个额外的空格.现在我只使用第二种形式。
    【解决方案3】:

    在 C++ 中和在 C 中一样,由空格分隔的字符串是隐式连接的,所以

    "foo" "bar" 
    

    相当于:

    "foobar"
    

    所以你想要:

    static const string message = "This is a message.\n"
                                   "It continues in the next line";
    

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多