Convierta el doble en la cadena C ++?

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 inválidos de los tipos ‘const char [2]’ y ‘double‘ a binary ‘operator +’

Aquí está la línea de código que arroja el error:

 storedCorrect [count] = "(" + c1 + "," + c2 + ")";

storedCorrect [] es una matriz de cadenas, y c1 y c2 son dobles. ¿Hay alguna manera de convertir c1 y c2 en cadenas para permitir que mi progtwig se compile correctamente?

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. Utilice boost::lexical_cast :

     storedCorrect[count] = "(" + boost::lexical_cast(c1) + ", " + boost::lexical_cast(c2) + ")"; 
  3. Use 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 maneras, usando varias funciones de conversión de doble cadena, pero estas son las principales formas en que lo verá.

En C ++ 11, use std::to_string si puede aceptar el formato predeterminado ( %f ).

 storedCorrect[count]= "(" + std::to_string(c1) + ", " + std::to_string(c2) + ")"; 

Use std::stringstream . Su operator << está sobrecargado para todos los tipos incorporados.

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

Esto funciona como era de esperar, del mismo modo que imprime en la pantalla con std::cout . Simplemente está "imprimiendo" en una cadena. Las partes internas del operator << cuiden de asegurarse de que haya espacio suficiente y de realizar las conversiones necesarias (por ejemplo, double a string ).

Además, si tiene la biblioteca de Boost disponible, puede considerar buscar en lexical_cast . La syntax se parece mucho a las versiones normales de estilo de C ++:

 #include  #include  using namespace boost; storedCorrect[count] = "(" + lexical_cast(c1) + "," + lexical_cast(c2) + ")"; 

Bajo el capó, boost::lexical_cast básicamente está haciendo lo mismo que hicimos con std::stringstream . Una ventaja clave del uso de la biblioteca de Boost es que puede ir por el otro camino (por ejemplo, string para double ) con la misma facilidad. No más problemas con atof() o strtod() y cadenas de estilo C crudas.

 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

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:

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/