C ++多行字符串原始文字

时间:2013-12-11 00:56:44

标签: c++

我们可以像这样定义一个多行的字符串:

const char* text1 = "part 1"
                    "part 2"
                    "part 3"
                    "part 4";

const char* text2 = "part 1\
                     part 2\
                     part 3\
                     part 4";

使用原始文字,我尝试了所有,没有人工作

std::string text1 = R"part 1"+
                    R"part 2"+ 
                    R"part 3"+
                    R"part 4";

std::string text2 = R"part 1"
                    R"part 2" 
                    R"part 3"
                    R"part 4";

std::string text3 = R"part 1\
                      part 2\ 
                      part 3\
                      part 4";

std::string text4 = R"part 1
                      part 2 
                      part 3
                      part 4";

2 个答案:

答案 0 :(得分:27)

只需按照您的意愿书写:

std::string text = R"(part 1
part 2
part 3
part 4)";

你没有放入的另一件事是整个字符串周围所需的一对括号。

还要记住,您可能会放置以保持代码格式化的部分2-4行的任何前导空格,以及与其他人一起获得第1部分的主要换行符,因此它确实使其成为有时难以在代码中看到。

对于保持整洁,但仍使用原始字符串文字可能合理的选项是连接换行符:

R"(part 1)" "\n" 
R"(part 2)" "\n" 
R"(part 3)" "\n" 
R"(part 4)"

答案 1 :(得分:26)

请注意,原始字符串文字由R"()"分隔(或者如果您需要额外的“唯一性”,则可以通过在引号和parens之间添加字符来添加到分隔符。)

#include <iostream>
#include <ostream>
#include <string>

int main () 
{
    // raw-string literal example with the literal made up of separate, concatenated literals
    std::string s = R"(abc)" 
                    R"( followed by not a newline: \n)"
                    " which is then followed by a non-raw literal that's concatenated \n with"
                    " an embedded non-raw newline";

    std::cout << s << std::endl;

    return 0;
}