software - ¿Convertir doble a cadena C++?
software de php (5)
Posible duplicado:
¿Cómo convierto un doble en una cadena en C ++?
Quiero combinar una cadena y un doble y g ++ está lanzando este error:
main.cpp: En la función ''int main ()'':
main.cpp: 40: error: operandos no válidos de los tipos ''const char [2]'' y ''double'' to binary ''operator +''
Aquí está la línea de código en la que está arrojando el error:
storedCorrect[count] = "("+c1+","+c2+")";
StoresCorrect [] es una matriz de cadenas, y c1 y c2 son dobles. ¿Hay alguna forma de convertir c1 y c2 en cadenas para permitir que mi programa se compile correctamente?
Creo que el sprintf es la función correcta para ti. Estoy en la biblioteca estándar, como printf. Siga el enlace de abajo para más información:
En C ++ 11, use std::to_string
si puede aceptar el formato predeterminado ( %f
).
storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")";
No puedes hacerlo directamente. Hay varias formas de hacerlo:
Use un
std::stringstream
:std::ostringstream s; s << "(" << c1 << ", " << c2 << ")"; storedCorrect[count] = s.str()
Use
boost::lexical_cast
:storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")";
Utilice
std::snprintf
:char buffer[256]; // make sure this is big enough!!! snprintf(buffer, sizeof(buffer), "(%g, %g)", c1, c2); storedCorrect[count] = buffer;
Hay varias otras formas, usando varias funciones de conversión de doble a cadena, pero estas son las principales formas en que lo verás hecho.
Utilice std::stringstream
. Su operator <<
está sobrecargado para todos los tipos incorporados.
#include <sstream>
std::stringstream s;
s << "(" << c1 << "," << c2 << ")";
storedCorrect[count] = s.str();
Esto funciona como cabría esperar, de la misma manera que imprime en la pantalla con std::cout
. Simplemente estás "imprimiendo" en una cadena. Las partes internas del operator <<
cuidan de asegurarse de que haya suficiente espacio y de hacer las conversiones necesarias (p. Ej., double
a la string
).
Además, si tiene la biblioteca Boost disponible, puede considerar buscar en boost::lexical_cast . La sintaxis se parece mucho a los modelos normales de C ++:
#include <string>
#include <boost/lexical_cast.hpp>
using namespace boost;
storedCorrect[count] = "(" + lexical_cast<std::string>(c1) +
"," + lexical_cast<std::string>(c2) + ")";
Bajo el capó, boost::lexical_cast
básicamente hace lo mismo que hicimos con std::stringstream
. Una ventaja clave del uso de la biblioteca Boost es que puede ir hacia otro lado (por ejemplo, una string
para double
) con la misma facilidad. No más problemas con atof()
o strtod()
y cadenas de estilo C sin atof()
.
std::string stringify(double x)
{
std::ostringstream o;
if (!(o << x))
throw BadConversion("stringify(double)");
return o.str();
}
Preguntas frecuentes sobre C ++: http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.1