web-dev-qa-db-fra.com

C ++ crée une chaîne de texte et de variables

J'essaie de faire quelque chose de très simple et pourtant, après une heure de recherche, je ne peux pas trouver de réponse appropriée, alors il me manque quelque chose d'assez évident.

J'essaie de créer dynamiquement des noms de fichiers à utiliser avec ifstream. Bien que je sache que diverses méthodes sont disponibles pour ce faire, j'ai décidé de créer un std :: string et d'utiliser stringname.c_str pour convertir en const.

Le problème est cependant que je dois créer la chaîne avec un mélange de variables et de valeurs de texte prédéfinies. Je reçois des erreurs de compilateur, ce doit donc être un problème de syntaxe.

Pseudo

std::string var = "sometext" + somevar + "sometext" + somevar;

Merci!

36
Jack Farrow

Avez-vous envisagé d'utiliser des courants à la chaîne?

#include <string>
#include <sstream>

std::ostringstream oss;
oss << "sometext" << somevar << "sometext" << somevar;
std::string var = oss.str();
52
mgiuffrida
std::string var = "sometext" + somevar + "sometext" + somevar;

Cela ne fonctionne pas car les ajouts sont effectués de gauche à droite et "sometext" (Le premier) est simplement un const char *. Il n'y a pas de operator+ À appeler. La solution la plus simple est la suivante:

std::string var = std::string("sometext") + somevar + "sometext" + somevar;

Maintenant, le premier paramètre de la liste de gauche à droite des opérations + Est un std::string, Qui a une operator+(const char *). Cet opérateur produit une chaîne, ce qui fait fonctionner le reste de la chaîne.

Vous pouvez également faire en sorte que toutes les opérations soient sur var, qui est un std::string Et ainsi tous les opérateurs nécessaires:

var = "sometext";
var += somevar;
var += "sometext";
var += somevar;
22
David Schwartz

En C++ 11, vous pouvez utiliser std :: to_string :

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar);  
19
David Rinck

Voir aussi boost :: format :

#include <boost/format.hpp>

std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str();
3
Yury

Vous pouvez également utiliser sprintf:

char str[1024];
sprintf(str, "somtext %s sometext %s", somevar, somevar);
2
Shocker