web-dev-qa-db-fra.com

Comment ajoutez-vous un int à une chaîne en C ++?

int i = 4;
string text = "Player ";
cout << (text + i);

Je voudrais qu'il imprime Player 4.

Ce qui précède est évidemment faux mais cela montre ce que j'essaie de faire ici. Y a-t-il un moyen facile de faire cela ou dois-je commencer à ajouter de nouveaux includes?

145
Wawa

Avec C++ 11, vous pouvez écrire:

#include <string>     // to use std::string, std::to_string() and "+" operator acting on strings 

int i = 4;
std::string text = "Player ";
text += std::to_string(i);
230
headmyshoulder

Eh bien, si vous utilisez cout, vous pouvez simplement écrire le nombre entier directement dessus, comme dans

_std::cout << text << i;
_

La manière C++ de convertir toutes sortes d'objets en chaînes est de string streams . Si vous n'en avez pas, créez-en un.

_#include <sstream>

std::ostringstream oss;
oss << text << i;
std::cout << oss.str();
_

Alternativement, vous pouvez simplement convertir l'entier et l'ajouter à la chaîne.

_oss << i;
text += oss.str();
_

Enfin, les bibliothèques Boost fournissent boost::lexical_cast , qui encapsule la conversion en chaîne avec une syntaxe similaire à celle utilisée pour les conversions de types intégrées.

_#include <boost/lexical_cast.hpp>

text += boost::lexical_cast<std::string>(i);
_

Cela fonctionne également dans l’inverse, c’est-à-dire pour analyser les chaînes.

190
Sebastian Redl
printf("Player %d", i);

(Réduisez ma réponse autant que vous le souhaitez; je ​​déteste toujours les opérateurs d'E/S C++.)

:-P

114
Eric

Celles-ci fonctionnent pour les chaînes générales (au cas où vous ne voudriez pas sortir dans un fichier/console, mais le stocker pour une utilisation ultérieure ou autre chose).

boost.lexical_cast

MyStr += boost::lexical_cast<std::string>(MyInt);

Flux de chaîne

//sstream.h
std::stringstream Stream;
Stream.str(MyStr);
Stream << MyInt;
MyStr = Stream.str();

// If you're using a stream (for example, cout), rather than std::string
someStream << MyInt;
19
Fire Lancer

Pour l'enregistrement, vous pouvez également utiliser un std::stringstream si vous voulez créer la chaîne avant qu'elle ne soit réellement affichée.

9
Jason Baker
cout << text << " " << i << endl;
6
jjnguy

Votre exemple semble indiquer que vous souhaitez afficher la chaîne suivie d'un entier, auquel cas:

string text = "Player: ";
int i = 4;
cout << text << i << endl;

fonctionnerait bien.

Toutefois, si vous stockez les emplacements de chaîne ou que vous les distribuez, et que vous le fassiez fréquemment, vous pouvez bénéficier d'une surcharge de l'opérateur d'addition. Je démontre ceci ci-dessous:

#include <sstream>
#include <iostream>
using namespace std;

std::string operator+(std::string const &a, int b) {
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

int main() {
  int i = 4;
  string text = "Player: ";
  cout << (text + i) << endl;
}

En fait, vous pouvez utiliser des modèles pour rendre cette approche plus puissante:

template <class T>
std::string operator+(std::string const &a, const T &b){
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

Maintenant, tant que l'objet b a une sortie de flux définie, vous pouvez l'ajouter à votre chaîne (ou au moins une copie de celle-ci).

4
Richard

Une autre possibilité est Boost.Format :

#include <boost/format.hpp>
#include <iostream>
#include <string>

int main() {
  int i = 4;
  std::string text = "Player";
  std::cout << boost::format("%1% %2%\n") % text % i;
}
3
Daniel James

Voici un petit exemple de conversion/ajout fonctionnel, avec du code dont j'avais besoin auparavant.

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}

la sortie sera:

/dev/video
/dev/video456
/dev/video321
/dev/video123

Notez que dans les deux dernières lignes, vous enregistrez la chaîne modifiée avant son impression et vous pouvez l'utiliser ultérieurement si nécessaire.

2
Robert Parcus

Pour mémoire, vous pouvez également utiliser la classe QString de Qt:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"
2
Brian Lenoski
cout << text << i;
1
john

Une méthode ici consiste à imprimer directement le résultat si cela est nécessaire à votre problème.

cout << text << i;

Sinon, l’une des méthodes les plus sûres consiste à utiliser

sprintf(count, "%d", i);

Et puis copiez-le dans votre chaîne "text".

for(k = 0; *(count + k); k++)
{ 
  text += count[k]; 
} 

Ainsi, vous avez votre chaîne de sortie requise

Pour plus d'informations sur sprintf, suivez: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << "Player" << i ;
0
rupello
cout << text << i;

L'opérateur << pour ostream renvoie une référence à ostream. Vous pouvez donc continuer à chaîner les opérations <<. Autrement dit, ce qui précède est fondamentalement le même que:

cout << text;
cout << i;
0
introp
cout << text << " " << i << endl;
0
GEOCHET

Vous essayez également de concaténer le numéro du joueur avec std::string::Push_back:

Exemple avec votre code:

int i = 4;
string text = "Player ";
text.Push_back(i + '0');
cout << text;

Vous verrez dans la console:

Joueur 4

Le moyen le plus simple de comprendre cela est le suivant ..
Cela fonctionnera comme chaîne simple et tableau de chaînes. J'envisage un tableau de chaînes, car il est compliqué (un peu la même chose sera suivie avec une chaîne). Je crée un tableau de noms et append un nombre entier et un caractère avec ce caractère pour montrer comme il est facile d’ajouter des éléments int et caractères à une chaîne, J'espère que ça aide. la longueur est juste pour mesurer la taille du tableau. Si vous êtes familier avec la programmation alors size_t est un unsigned int

#include<iostream>
    #include<string>
    using namespace std;
    int main() {

        string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
        int length = sizeof(names) / sizeof(names[0]); //give you size of array
        int id;
        string append[7];    //as length is 7 just for sake of storing and printing output 
        for (size_t i = 0; i < length; i++) {
            id = Rand() % 20000 + 2;
            append[i] = names[i] + to_string(id);
        }
        for (size_t i = 0; i < length; i++) {
            cout << append[i] << endl;
        }


}
0
Code Black