为了账号安全,请及时绑定邮箱和手机立即绑定

C ++多行字符串文字

C ++多行字符串文字

C++
开心每一天1111 2019-12-06 07:06:16
有什么方法可以在C ++中使用Perl编写多行纯文本,常量文字?也许解析#include文件有一些技巧?我想不出一个,但是男孩,那太好了。我知道它将用C ++ 0x。
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

好吧。最简单的方法是使用以下事实:相邻字符串文字由编译器连接:


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 =

  “另一方面,我疯了\

并真正让文字跨越几行,

不用麻烦引用每一行的\

内容。这可行,但是您不能缩进。”

同样,请注意每行末尾的那些反斜杠,它们必须紧接在行末之前,它们在源代码中转义了换行符,以便所有内容都好像换行符不在那里。在反斜杠的位置,字符串中不会出现换行符。使用这种形式,您显然无法缩进文本,因为缩进将随后成为字符串的一部分,并在字符串中添加随机空格。




查看完整回答
反对 回复 2019-12-07
?
暮色呼如

TA贡献1853条经验 获得超9个赞

在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"( ... )";

仍然需要引号内的括号。



查看完整回答
反对 回复 2019-12-07
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

输入多行字符串的一种可能方便的方法是使用宏。仅当引号和括号之间是平衡的并且不包含“顶级”逗号时,此方法才有效:


#define MULTI_LINE_STRING(a) #a

const 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__允许使用,。



查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信