Converti doppio in stringa C ++?

Possibile duplicato:
Come posso convertire un doppio in una stringa in C ++?

Voglio combinare una stringa e una doppia e g ++ lancia questo errore:

main.cpp: nella funzione ‘int main ()’:
main.cpp: 40: errore: operandi non validi dei tipi ‘const char [2]’ e ‘double‘ to binary ‘operator +’

Ecco la riga di codice su cui sta lanciando l’errore:

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

storedCorrect [] è un array di stringhe e c1 e c2 sono entrambi doppi. C’è un modo per convertire c1 e c2 in stringhe per consentire al mio programma di compilare correttamente?

Non puoi farlo direttamente. Ci sono diversi modi per farlo:

  1. Usa uno std::stringstream :

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

     storedCorrect[count] = "(" + boost::lexical_cast(c1) + ", " + boost::lexical_cast(c2) + ")"; 
  3. Usa std::snprintf :

     char buffer[256]; // make sure this is big enough!!! snprintf(buffer, sizeof(buffer), "(%g, %g)", c1, c2); storedCorrect[count] = buffer; 

Ci sono molti altri modi, usando varie funzioni di conversione da doppia a stringa, ma questi sono i modi principali in cui vedrai che è fatto.

In C ++ 11, usa std::to_string se puoi accettare il formato predefinito ( %f ).

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

Usa std::stringstream . Il suo operator << è sovraccarico per tutti i tipi built-in.

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

Funziona come ci si aspetterebbe - nello stesso modo in cui si stampa sullo schermo con std::cout . Invece stai semplicemente "stampando" su una stringa. Gli interni operator << si occupano di assicurarsi che ci sia abbastanza spazio e di fare tutte le conversioni necessarie (ad esempio, da double a string ).

Inoltre, se disponi della libreria Boost disponibile, potresti prendere in considerazione la possibilità di esaminare lexical_cast . La syntax assomiglia molto ai normali cast di stile C ++:

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

Sotto il cofano, boost::lexical_cast sta fondamentalmente facendo la stessa cosa che abbiamo fatto con std::stringstream . Un vantaggio chiave nell'uso della libreria Boost è che puoi andare dall'altra parte (ad es. string da double ) altrettanto facilmente. Niente più atof() con le atof() o strtod() e in stile C grezzo.

 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

Credo che lo sprint sia la funzione giusta per te. Sono nella libreria standard, come printf. Segui il link sottostante per maggiori informazioni:

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