Как получить двойные кавычки в строковый литерал?

У меня есть следующий вывод, созданный с помощью printf() заявление:

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

но я хочу поставить фактическую цитату в двойные кавычки, поэтому вывод

Она сказала: «Время летит, как стрела, а фрукты летят, как банан».

без вмешательства в двойные кавычки, используемые для переноса строкового литерала в printf() заявление.

Как я могу это сделать?

17

Решение

Побег цитаты с обратной косой черты:

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

Есть специальные побег персонажей что вы можете использовать в строковых литералах, и они обозначаются символом обратной косой черты.

49

Другие решения

К счастью, в 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 символов, что помогает избежать ситуации, когда эта комбинация присутствует в самой строке. В частности:

любой элемент базового исходного набора символов, кроме: пробел, слева
скобка (, правая скобка), обратный слеш \ и
управляющие символы, представляющие горизонтальную вкладку, вертикальную вкладку, форму
feed и newline «(N3936 §2.14.5 [lex.string] грамматика) и» не более
16 символов «(§2.14.5 / 2)

Насколько понятнее это тривиальное предложение, может быть спорным, но при использовании с отформатированными строками, такими как HTML или JSON, оно, несомненно, намного понятнее.

9

По вопросам рекламы [email protected]