Question

Je travaille en Java depuis que j'ai commencé à programmer et que j'ai décidé d'apprendre le C++.Ce que j'ai écrit en Java ressemblait à ceci :

showMessage("Hello world" + randomNumber);

Et il montrait du texte + un entier ou un float ou autre.Mais cela ne fonctionnera pas en C++.Message d'erreur par xCode : Invalid operands to binary expression ('const char *' and 'float')

Acclamations!

Était-ce utile?

La solution

Vous pouvez faire un sprintf selon Anton, ou pour être plus c++:

std::stringstream ss;
ss << "Hello, world " << randomNumber;
showmessage(ss.str());

(il n'y a rien de mal avec sprintf, surtout si vous utilisez snprintf plutôt).

Autres conseils

    ostringstream os;
    os<<"HelloWorld"<<randomnumber;
    string s;
    s = os.str();

String s maintenant contient la chaîne souhaitée en tant qu'objet de chaîne.

Aussi vous pouvez utiliser boost :: lexical_cast Pour lancer des nombres dans les chaînes qui est la méthode la plus rapide dans la plupart des cas:

showMessage("Hello world" + boost::lexical_cast<std::string>(randomNumber));

Déclaration ShowMessage est

void showMessage(cosnt std::string& message)

Envisagez d'ajouter une nouvelle fonction capable de convertir plusieurs types à STD :: String:

template<typename ty>
string to_str(ty t)
{
   stringstream ss; ss << t;
   return ss.str();
}

Utilisation:

"Hello World " + to_str(123)

Définir une classe S.Puis écrire

showMessage( S() << "Hello world" << randomNumber );

J'ai codé le S classe trop de fois pour SO, et c'est un bon exercice de la créer, donc de ne pas fournir le code source.

Notez que vous pouvez raisonnablement l'appeler StringWriter ou quelque chose comme ça, puis utilisez simplement un typedef pour un code plus concis dans les appels de fonction.

Je ne suis pas sûr que la réponse de style C est bien, mais je l'ai déjà répondu ici dans une question Cocos2D-x.

Essayer de configurer un cclabelttf avec un entier dans le cadre de sa chaîne de Cocos2D-X C ++

avec C ++ 11:

showMessage("Hello world" + std::to_string(randomNumber));

Vous devez imprimer dans le char * à la place.

vous pouvez faire quelque chose comme

char* tempBuffer = new char[256];

sprintf_s(tempBuffer, 256, "Hello world %d", randomNumber);

showMessage(tempBuffer);

En C++, la manière standard de concaténer des chaînes et des primitives consiste à utiliser stringstream.Qui remplit la même fonctionnalité (et un peu plus) que StringBuilder en Java (bien sûr son API diffère).Cependant, si vous êtes à l'aise avec cout Ensuite ça devrait aller.

par exemple.

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

using namespace std;

int main () {
  stringstream ss;
  ss << "Some string - " << 124; // build string    
  string str = ss.str(); // extract string

  cout << str << endl;
  return 0;
}

Référence rapide pour stringstream http://www.cplusplus.com/reference/iostream/stringstream/stringstream/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top