2009-08-28 3 views
4

Я знаю, что на C++ и в PHP вы можете заполнить строку или файл жестко закодированным текстом. Если я правильно помню, это то, как это должно выглядеть:Что это значит, когда вы можете заполнить строку с помощью <<< и end-delimiter?

var <<< DELIMITER 
    Menu for program X 
    1.Add two numbers 
    2.Substract two numbers 
    3.Multiply two numbers 
    Please pick an option from (0-3); 
DELIMITER 

Это может быть использовано для меню или текст, который остается неизменным независимо от того, как заголовок. Но без того, чтобы сделать:

foobar << "Menu for program X" << endl << "1.Add two numbers" << endl << "2.Substract two numbers" 
+0

СПАСИБО, это сводило меня с ума. Теперь я знаю, как это называется, я смотрел в основном на VB.net, так как я делал эксперимент, но, к сожалению, его тоже нет, и писать конструктор строк - это боль. Придется сделать мини-прог, чтобы сделать это для меня. Хотелось бы, чтобы они разрешили вам это сделать. – ThorDivDev

ответ

4

Это называется HEREDOC синтаксис в PHP:

<?php 

$str = <<<EOD 
Example of string 
spanning multiple lines 
using heredoc syntax. 
EOD; 

?> 
+13

Разве он не искал эквивалент C++? –

+3

Смешно, что ответ PHP принимается. ЭТО ПРОСИТ СВОЙ вариант. – Nizzy

1

Многострочный строковый литерал?

+0

Это похоже на то, что ищет OP; Однако я не думаю, что вы можете помещать символы новой строки. –

+0

@sheepsimulator Вам нужно избегать их или процитировать каждую строку отдельно. Googling для «многострочного строкового литерала C++» приводит несколько примеров. – Drakonite

18

C++ не имеет эквивалента синтаксису HEREDOC от PHP.

Вы можете, однако, сделать это в C++:

cout << " Menu for program X\n" 
     " 1.Add two numbers\n" 
     " 2.Substract two numbers\n" 
     " 3.Multiply two numbers\n" 
     " Please pick an option from (0-3);" << endl; 

Или это в C:

printf(" Menu for program X\n" 
     " 1.Add two numbers\n" 
     " 2.Substract two numbers\n" 
     " 3.Multiply two numbers\n" 
     " Please pick an option from (0-3);\n"); 
fflush(stdout); 

Который прямо эквивалентен Heredoc синтаксиса РНР:

echo <<<EOT 
    Menu for program X 
    1.Add two numbers 
    2.Substract two numbers 
    3.Multiply two numbers 
    Please pick an option from (0-3); 
EOT; 

выше синтаксиса для C и C++ обрабатывается компилятором как одна длинная строка, сшивая их вместе. Это не имеет никакого другого влияния на строковый литерал, следовательно, требуется «\ n».

+0

Обратите внимание, что <<< LABEL в PHP, однако, похоже, что C++ полностью не связан. <<< LABEL - просто забавная строка. << является оператором. Отмечу, что мне удалось запрограммировать 35 лет, используя простые строковые кавычки, поэтому литералы HEREDOC от PHP кажутся мне еще одним избыточным битом бесполезного синтаксиса. –

+0

Я очень * осознаю разницу. И HEREDOC - это немного больше, чем просто «забавная строка», это похоже на строки с двумя кавычками, но с предварительно отформатированным текстом. Это чрезвычайно полезно в ситуациях, когда вы создаете очень длинные строки или много выходных данных. (И интеллектуальные редакторы могут распознавать синтаксис HEREDOC, и если вы используете, например, <<< SQL или <<< HTML, редактор может сделать соответствующую подсветку синтаксиса для вас.) Это ни в коем случае не избыточно или бесполезно. Я также хотел бы указать вам, что в C++ синтаксис, который я показал, одинаково хорошо работает для printf() или других вещей. – greyfade

+3

Ваша эквивалентность C++-C неверна.'endl' напечатает новую строку и очистит поток. Ваш код C не печатает новую строку и не сбрасывает поток. Он нуждается в 'printf (" \ n "); fflush (stdout); ' – GManNickG

1

В Windows вы храните длинный текст как ресурс или файл.

Вы можете сохранить его в Unixish, используя библиотеки интернационализации (I18). Хорошая хачка, чтобы написать строку в вашей программе, например printf(_("_xmenu_ %d, %d, %d"), 1, 2, 3), а затем вы можете «перевести» _xmenu_ на английский язык, а также на любые другие языки, которые вы хотите поддержать. Поскольку переводы хранятся в другом файле, вам не нужно постоянно смотреть на них, и их легко изменить без перекомпиляции.

+0

В этом конкретном случае нет необходимости хранить его в другом файле, так как это эксперимент для меня, но я согласен, что лучше использовать внешние средства для хранения статических вещей, поскольку пользователи, как правило, любят менять материал пользовательского интерфейса. – ThorDivDev

Смежные вопросы