Как получить двойные кавычки в строковый литерал?
У меня есть следующий вывод, созданный с помощью инструкции printf()
:
printf("She said time flies like an arrow, but fruit flies like a banana.");
но я хочу поместить фактическую цитату в двойные кавычки, поэтому вывод
Она сказала: "Время летит как стрела, но плод мухи, как банан".
не мешая двойным кавычкам, используемым для обертывания строкового литерала в инструкции printf()
.
Как я могу это сделать?
Ответы
Ответ 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, он, несомненно, намного яснее.