C ++多行字符串文字

有什么方法可以在C ++中使用Perl编写多行纯文本,常量文字?也许解析#include文件有一些技巧?我想不出一个,但是男孩,那太好了。我知道它将用C ++ 0x。

开心每一天1111
浏览 371回答 3
3回答

www说

好吧。最简单的方法是使用以下事实:相邻字符串文字由编译器连接:const char *text =  "This text is pretty long, but will be "  "concatenated into just a single string. "  "The disadvantage is that you have to quote "  "each part, and newlines must be literal as "  "usual.";缩进并不重要,因为它不在引号内。只要您注意避开嵌入式换行符,也可以执行此操作。失败,就像我的第一个答案一样,将不会编译:const char * text2 =  “另一方面,我疯了\并真正让文字跨越几行,不用麻烦引用每一行的\内容。这可行,但是您不能缩进。”同样,请注意每行末尾的那些反斜杠,它们必须紧接在行末之前,它们在源代码中转义了换行符,以便所有内容都好像换行符不在那里。在反斜杠的位置,字符串中不会出现换行符。使用这种形式,您显然无法缩进文本,因为缩进将随后成为字符串的一部分,并在字符串中添加随机空格。

暮色呼如

在C ++ 11中,您具有原始字符串文字。shell和脚本语言(例如Python,Perl和Ruby)中的此处文本有点类似。const char * vogon_poem = R"V0G0N(             O freddled gruntbuggly thy micturations are to me                 As plured gabbleblochits on a lurgid bee.              Groop, I implore thee my foonting turlingdromes.              And hooptiously drangle me with crinkly bindlewurdles,Or I will rend thee in the gobberwarts with my blurlecruncheon, see if I don't.                (by Prostetnic Vogon Jeltz; see p. 56/57))V0G0N";字符串中的所有空格和缩进以及换行符都将保留。它们也可以是utf-8 | 16 | 32或wchar_t(具有通常的前缀)。我应该指出,这里实际上不需要转义序列V0G0N。它的存在将允许在字符串中放入)“。换句话说,我可以将                "(by Prostetnic Vogon Jeltz; see p. 56/57)"(请注意额外的引号),并且上面的字符串仍然正确。否则我也可以使用const char * vogon_poem = R"( ... )";仍然需要引号内的括号。

qq_遁去的一_1

输入多行字符串的一种可能方便的方法是使用宏。仅当引号和括号之间是平衡的并且不包含“顶级”逗号时,此方法才有效:#define MULTI_LINE_STRING(a) #aconst char *text = MULTI_LINE_STRING(  Using this trick(,) you don't need to use quotes.  Though newlines and     multiple     white   spaces  will be replaced by a single whitespace.);printf("[[%s]]\n",text);与gcc 4.6或g ++ 4.6一起编译,会产生: [[Using this trick(,) you don't need to use quotes. Though newlines and multiple white spaces will be replaced by a single whitespace.]]请注意,,除非在括号或引号中包含,否则不能在字符串中。单引号是可能的,但是会产生编译器警告。编辑:如评论中所述,#define MULTI_LINE_STRING(...) #__VA_ARGS__允许使用,。
打开App,查看更多内容
随时随地看视频慕课网APP