Подтвердить что ты не робот

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

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

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

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

Она сказала: "Время летит как стрела, но плод мухи, как банан".

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

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

4b9b3361

Ответ 1

Сбросьте кавычки с обратной косой чертой:

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

Существуют специальные escape-символы, которые можно использовать в строковых литералах, и они обозначаются с помощью обратного слэша.

Ответ 2

К счастью, с С++ 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, он, несомненно, намного яснее.