2009-08-28 15 views
4

Je sais en C++ et en PHP vous pouvez remplir une chaîne ou un fichier avec du texte codé en dur. Si je me souviens bien voici comment il est censé regarder:Comment s'appelle-t-il lorsque vous pouvez remplir une chaîne avec <<< et un délimiteur de fin?

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 

Ceci peut être utilisé pour les menus ou le texte qui reste le même, peu importe ce que comme un en-tête. Mais sans avoir à faire:

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

MERCI, ça me rendait fou. Maintenant je sais comment ça s'appelle, je cherchais principalement VB.net puisque je faisais une expérience mais malheureusement ce n'est pas là non plus et écrire la chose de la construction de cordes est une douleur. J'ai dû faire un mini prog pour le faire pour moi. Je souhaite qu'ils vous ont permis de faire cela. – ThorDivDev

Répondre

4

Il appelle la syntaxe HEREDOC en PHP:

<?php 

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

?> 
+13

Ne recherchait-il pas l'équivalent C++? –

+3

Il est ridicule que la réponse PHP soit acceptée. Il est demandé la version C++ de celui-ci. – Nizzy

1

chaîne multiligne littérale?

+0

Ceci est similaire à ce que le PO recherche; Je ne pense pas que vous puissiez y ajouter des caractères de nouvelle ligne. –

+0

@sheepsimulator Vous devez leur échapper, ou citer chaque ligne individuellement. Google pour "chaîne multiligne littéraire C++" apporte quelques exemples. – Drakonite

18

C++ n'a pas d'équivalent à la syntaxe HEREDOC de PHP.

Vous pouvez cependant faire en 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; 

Ou cela en 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); 

est directement équivalent à la syntaxe heredoc 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; 

Le La syntaxe ci-dessus pour C et C++ est traitée par le compilateur comme une longue chaîne, en les assemblant. Il n'a pas d'autre effet sur le littéral de chaîne, d'où la nécessité de '\ n'.

+0

Notez que le <<< LABEL en PHP, mais il ressemble beaucoup à celui du C++ est complètement indépendant. <<< LABEL est juste une citation de chaîne drôle. << est un opérateur. Je noterai que j'ai réussi à programmer pendant plus de 35 ans en utilisant de simples citations de chaînes, donc les littéraux HEREDOC de PHP me semblent être juste un peu plus redondant de syntaxe inutile. –

+0

Je suis * tout à fait * conscient de la différence. Et HEREDOC est un peu plus qu'une "citation de chaîne drôle", c'est similaire à des chaînes entre guillemets doubles, mais avec du texte préformaté. C'est extrêmement utile dans les situations où vous créez des chaînes très longues ou beaucoup de sortie. (Et les éditeurs intelligents peuvent reconnaître la syntaxe HEREDOC, et si vous utilisez, par exemple, <<< SQL, ou <<< HTML, l'éditeur peut faire la mise en évidence syntaxique appropriée pour vous.) Ce n'est en aucun cas redondant ou inutile. Je voudrais également vous signaler qu'en C++, la syntaxe que j'ai montrée fonctionne aussi bien pour printf() que pour d'autres choses. – greyfade

+3

Votre équivalence C++ vers C est incorrecte.'endl' va imprimer un retour à la ligne, et vider le flux. Votre code C n'imprime pas de saut de ligne ni ne vide le flux. Il a besoin d'un 'printf (" \ n "); fflush (stdout); ' – GManNickG

1

Sous Windows, vous stockez du texte long en tant que ressource ou en tant que fichier.

Vous pouvez le stocker dans Unixish en utilisant des bibliothèques d'internationalisation (I18). C'est un bon hack pour écrire la chaîne dans votre programme comme printf(_("_xmenu_ %d, %d, %d"), 1, 2, 3) et alors vous pouvez "traduire" _xmenu_ en anglais, ainsi que toutes les autres langues que vous voulez soutenir. Parce que les traductions sont stockées dans un autre fichier, vous n'avez pas à les regarder tout le temps et elles sont faciles à modifier sans recompilation.

+0

Dans ce cas particulier, il n'est pas nécessaire de stocker dans un fichier différent car c'est une expérience pour moi-même mais je suis d'accord qu'il est préférable d'utiliser des moyens externes pour stocker les choses statiques. – ThorDivDev

Questions connexes