versiones software php5 net informacion español descripcion c++ string double tostring

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?



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:

  1. Use un std::stringstream :

    std::ostringstream s; s << "(" << c1 << ", " << c2 << ")"; storedCorrect[count] = s.str()

  2. Use boost::lexical_cast :

    storedCorrect[count] = "(" + boost::lexical_cast<std::string>(c1) + ", " + boost::lexical_cast<std::string>(c2) + ")";

  3. 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() .