2009-08-28 19 views
4

私はC++とPHPで、文字列やファイルにハードコードされたテキストを埋め込むことができます。私の記憶が正しければ、これは見えるようになっている方法です。<<<と終了区切り文字で文字列を埋めることができるときは、何を呼び出すのですか?

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 

これは、メニューや同じどんなヘッダのような残っていないテキストに使用することができます。しかし、やってなくても:

<?php 

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

?> 
+0

ありがとう、これは私を夢中にさせていた。今私はそれが呼び出される方法を知っている、私は実験を行っていたので私は主にVB.netを探していたが、悲しいことにそこにも文字列ビルダーのことを書くことは苦痛である。私のためにミニプロッグをしなければならなかった。彼らがあなたにそれをさせて欲しいと思います。 – ThorDivDev

答えて

4

これは、PHPでHEREDOC構文と呼ばれていますか?

+13

彼はC++の同等物を探していませんでしたか? –

+3

PHPの答えが受け入れられるのはばかげている。それはC++バージョンのものです。 – Nizzy

1

複数行の文字列リテラル:

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

これは、OPが探しているものに似ています。私はそれに改行文字を入れることはできないと思います。 –

+0

@sheepsimulatorそれらをエスケープするか、各行を個別に引用する必要があります。 "multiline string literal C++"のグーグルでは、いくつかの例があります。 – Drakonite

18

C++には、PHPのHEREDOC構文に相当するものはありません。

ただし、C++でこれを行うことができます。

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; 

またはこの:

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); 

PHPのヒアドキュメント構文に直接相当する:

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++の構文は、コンパイラによって1つの長い文字列として扱われます。それは文字列リテラルには他に影響を与えないので、 '\ n'の必要性があります。

+0

PHPの<<< LABELはC++のように見えますが、完全に無関係であることに注意してください。 <<< LABELは面白い見た目の文字列引用です。 <<は演算子です。私はプレーン・オール文字列の引用符を使って35年以上プログラムを作成していたので、PHPのHEREDOCリテラルは私には役に立たない構文のもう一つの余分なビットであるように思えます。 –

+0

私はその違いをかなり知っています。そしてHEREDOCはちょうど "面白い見た目の文字列引用"です。二重引用符で囲まれた文字列に似ていますが、書式設定されたテキストがあります。非常に長い文字列やたくさんの出力を作成する場合には非常に便利です。 (スマートエディタはHEREDOC構文を認識できます。たとえば、<<< SQLまたは<<< HTMLを使用すると、エディタは適切な構文強調表示を行うことができます)。また、C++では、私が示した構文がprintf()などでも同じように機能することを指摘したいと思います。 – greyfade

+3

C++からCへの等価性が間違っています。'endl'は改行を出力し、ストリームをフラッシュします。あなたのCコードは、改行を印刷せず、ストリームをフラッシュしません。それには 'printf(" \ n "); fflush(stdout); ' – GManNickG

1

Windowsでは、長いテキストをリソースまたはファイルとして保存します。

国際化(I18)ライブラリを使用してUnixishに格納することができます。 printf(_("_xmenu_ %d, %d, %d"), 1, 2, 3)のようなプログラムの文字列を書くのは良いハックですし、_xmenu_を英語に翻訳したり、サポートしたい言語を他​​の言語に翻訳することもできます。翻訳は別のファイルに保存されているので、いつでもそれらを見る必要はなく、再コンパイルしなくても簡単に変更できます。

+0

このような場合は、自分で実験するため別のファイルに保存する必要はありませんが、ユーザーがUIの内容を変更するのが好きなので、静的なものを保存する外部手段を使用することがベストプラクティスであることに同意します。 – ThorDivDev

関連する問題