17 votes

Une méthode C++ efficace pour donner une signification littérale aux symboles spéciaux (") dans une chaîne C++.

Je veux mettre ça :

<script src = "Script2.js" type = "text/javascript"> < / script>

dans un std::string J'ajoute donc un ( \ ) avant chaque guillemet double ( " ) pour lui donner une signification littérale de ", au lieu d'une démarcation de chaîne en C++ comme ceci :

std::string jsFilesImport = "<script src = \"Script2.js\" type = \"text/javascript\"> < / script>\""

Si j'ai un grand string avec de nombreux ( " ), en ajoutant ( \ ) pour chaque ( " ) devient difficile. Existe-t-il un moyen simple d'y parvenir en C++ ?

31voto

user0042 Points 7066

Le moyen le plus simple est d'utiliser un littéral de chaîne de caractères brut :

std::string s = R"x(<script src = "Script2.js" type = "text/javascript"> < / script>)x";
             // ^^^^                                                                ^^^

Vous devez juste faire attention à ce que le x( )x ne sont pas utilisés dans le texte fourni à l'intérieur. Tous les autres caractères apparaissant dans ces délimiteurs sont rendus tels quels (y compris les retours à la ligne). x est choisi arbitrairement, pourrait être something( , )something également.


Pour éviter d'autres questions à ce sujet :

Non, ce n'est pas possible de faire 1 quelque chose comme

std::string s = R"resource(
#include "MyRawTextResource.txt"
)resource";

Le préprocesseur ne reconnaîtra pas l'option #include "MyRawTextResource.txt" car il est inclus dans une paire de guillemets doubles ( " ).

Dans ce cas, envisagez d'introduire votre étape de précompilation personnalisée qui effectue le remplacement du texte avant la compilation.


1) En tout cas, je n'ai pas réussi à trouver une solution de contournement. J'apprécierais que quelqu'un me prouve que j'ai tort à ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X