193 votes

Comment concaténer plusieurs chaînes C++ sur une seule ligne?

C# a une syntaxe de la fonction qui vous permet de concaténer plusieurs types de données d'ensemble sur 1 ligne.

string s = new String();
s += "Hello world, " + myInt + niceToSeeYouString;
s += someChar1 + interestingDecimal + someChar2;

Quel serait l'équivalent en C++? Aussi loin que je peux voir, vous auriez à faire tout cela sur des lignes séparées comme il ne prend pas en charge plusieurs chaînes/variables avec l'opérateur+. C'est OK, mais n'a pas l'air soigné.

string s;
s += "Hello world, " + "nice to see you, " + "or not.";

Le code ci-dessus produit une erreur.

292voto

Paolo Tedesco Points 22442
#include <sstream>
#include <string>

std::stringstream ss;
ss << "Hello, world, " << myInt << niceToSeeYouString;
std::string s = ss.str();

Jetez un oeil à ce Gourou De La Semaine de l'article de Herb Sutter: La Chaîne de Formatage de Manor Farm

43voto

John Dibling Points 56814

Votre code peut être écrit comme1,

s = "Hello world," "nice to see you," "or not."

...mais je doute que c'est ce que vous cherchez. Dans votre cas, vous êtes probablement à la recherche pour les cours d'eau:

std::stringstream ss;
ss << "Hello world, " << 42 << "nice to see you.";
std::string s = ss.str();

1 "peut être écrite comme" : Cela ne fonctionne que pour les littéraux de chaîne. La concaténation se fait par le compilateur.

19voto

SebastianK Points 1324

Afin d'offrir une solution qui est plus d'une ligne-ish: Avec

void addToStream(std::stringstream& /*a_stream*/)
{
}

template<typename T, typename... Args>
void addToStream(std::stringstream& a_stream, const T& a_value, Args... a_args)
{
    a_stream << a_value;
    addToStream(a_stream, a_args...);
}

template<typename... Args>
std::string concatenate(Args... a_args)
{
    std::stringstream s;
    addToStream(s, a_args...);
    return s.str();
}

vous pouvez écrire

std::string s = concatenate("Hello, ", 42, " I concatenate", anyStreamableType);

7voto

bayda Points 7454

boost::format

ou std::stringstream

std::stringstream msg;
msg << "Hello world, " << myInt  << niceToSeeYouString;
msg.str(); // returns std::string object

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