Duplicata possible:
Comment convertir un double en chaîne en C++?
Je veux combiner une chaîne et un double et g ++ lance cette erreur:
main.cpp: Dans la fonction ‘int main ()’:
main.cpp: 40: erreur: opérandes invalides de types "const char [2]" et "double" en binaire "opérateur +"
Voici la ligne de code sur laquelle il lance l'erreur:
storedCorrect [count] = "(" + c1 + "," + c2 + ")";
storedCorrect [] est un tableau de chaînes, et c1 et c2 sont tous deux doubles. Existe-t-il un moyen de convertir c1 et c2 en chaînes pour permettre à mon programme de se compiler correctement?
Vous ne pouvez pas le faire directement. Il existe plusieurs façons de procéder:
Utiliser un std::stringstream
:
std::ostringstream s;
s << "(" << c1 << ", " << c2 << ")";
storedCorrect[count] = s.str()
Utilisation boost::lexical_cast
:
storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")";
Utilisation std::snprintf
:
char buffer[256]; // make sure this is big enough!!!
snprintf(buffer, sizeof(buffer), "(%g, %g)", c1, c2);
storedCorrect[count] = buffer;
Il existe un certain nombre d'autres façons, en utilisant diverses fonctions de conversion de double en chaîne, mais ce sont les principales façons de le faire.
En C++ 11, tilisez std::to_string
si vous pouvez accepter le format par défaut (%f
).
storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")";
Utilisez std::stringstream
. Son operator <<
Est surchargé pour tous les types intégrés.
#include <sstream>
std::stringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect[count] = s.str();
Cela fonctionne comme vous vous en doutez - de la même manière que vous imprimez à l'écran avec std::cout
. Vous "imprimez" simplement une chaîne à la place. Les internes de operator <<
Veillent à ce qu'il y ait suffisamment d'espace et à effectuer les conversions nécessaires (par exemple, double
à string
).
De plus, si vous disposez de la bibliothèque Boost, vous pourriez envisager de consulter lexical_cast
. La syntaxe ressemble beaucoup aux conversions de style C++ normales:
#include <string>
#include <boost/lexical_cast.hpp>
using namespace boost;
storedCorrect[count] = "(" + lexical_cast<std::string>(c1) +
"," + lexical_cast<std::string>(c2) + ")";
Sous le capot, boost::lexical_cast
Fait essentiellement la même chose que nous avons fait avec std::stringstream
. Un avantage clé de l'utilisation de la bibliothèque Boost est que vous pouvez aller dans l'autre sens (par exemple, string
à double
) tout aussi facilement. Plus besoin de jouer avec atof()
ou strtod()
et les chaînes brutes de style C.
std::string stringify(double x)
{
std::ostringstream o;
if (!(o << x))
throw BadConversion("stringify(double)");
return o.str();
}
FAQ C++: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1
Je crois que le sprintf est la bonne fonction pour vous. Je suis dans la bibliothèque standard, comme printf. Suivez le lien ci-dessous pour plus d'informations: