En citant les chaînes de caractères en C++
En Pascal Lazarus/Delphi, nous avons une fonction QuotedStr() qui encapsule toute chaîne de caractères à l'intérieur des guillemets simples.
Voici un exemple de mon code C++:
//I need to quote tblCustomers
pqxx::result r = txn.exec( "Select * from \"tblCustomers\" ");
Un autre:
//I need to quote cCustomerName
std::cout << "Name: " << r[a]["\"cCustomerName\""];
Similaire à ce qui précède, j'ai souvent les guillemets doubles cordes. En tapant ceci en est une sorte de ralentissement de moi vers le bas. Est-il une fonction standard je peux utiliser pour cela?
BTW, j'ai développer en utilisant Ubuntu/Windows avec Code::Blocks. La technique utilisée doit être compatible entre les deux plates-formes. Si il n'y a pas de fonction, cela signifie que je dois en écrire un.
- Avec C++11, vous pouvez utiliser des littéraux de chaîne: voir, par exemple, stackoverflow.com/questions/10501599/...
- Eh bien, qui semblerait plus de travail. Je suis à la recherche des moyens d'accélérer mon travail 🙂 Merci quand même 🙂
R"(...)"
est plus de travail que"..."
et d'avoir à s'inquiéter au sujet d'échapper partout? Vous ne savez pas comment vous comprendre cela. Si il n'y a qu'un ou deux caractères à échapper il peut être plus verbeux, mais il y a moins de penser ou de se tromper....
Vous devez vous connecter pour publier un commentaire.
Voir plus d'options ici
String QuotedStr(String "es, String &orig) { return quotes + orig + quotes; }
À l'aide de C++11, vous pouvez créer défini par l'utilisateur littéraux comme ceci:
De sortie:
Vous pouvez même définir l'opérateur avec un nom plus court si vous voulez, par exemple:
Plus d'infos sur défini par l'utilisateur littéraux
C++14 ajouté
std::quoted
qui fait exactement cela, et de plus en fait: il prend soin de s'échapper les guillemets et les barres obliques inverses dans les flux de sortie, et de unescaping dans les flux d'entrée. Il est efficace, en ce qu'elle ne permet pas de créer une nouvelle chaîne, c'est vraiment un IO manipulateur. (Si vous n'obtenez pas une chaîne, comme vous le souhaitez.)donne
Comme décrit dans sa proposition, il a été vraiment conçu pour les aller-retour de chaînes.
Pas de fonction standard, sauf si vous comptez
std::basic_string::operator+()
, mais l'écriture c'est trivial.Je suis un peu confus par ce que vous ralentir -
quoted( "cCustomerName" )
est plus de caractères, non? :>Vous pouvez utiliser votre propre espace réservé personnage, pour la citation, certains symbole ASCII qui ne sera jamais utilisé, et de la remplacer par " juste avant la sortie des chaînes de caractères.
Avec cela, vous obtenez ce que vous voulez.