2015-06-22 17 views
5

So che sembra stupido, ma sto usando MinGW32 su Windows7 e "to_string non è stato dichiarato in questo ambito". It's an actual GCC Bug e ho seguito these instructions e non hanno funzionato. Quindi, come posso convertire un int in una stringa in C++ 11 senza usare to_string o stoi? (Inoltre, ho il flag -std=c++11 abilitato).Come posso convertire un int in una stringa in C++ 11 senza usare to_string o stoi?

+5

Beh, si potrebbe utilizzare al posto MinGW-W64 che lo supporta –

+2

Sarebbe 'boost :: lexical_cast' una soluzione accettabile? –

+2

Si potrebbe usare 'sprintf'. In realtà ci sono * molte * opzioni: 'atoi' e company (non-abbastanza-standard), string stream, le funzioni printf. –

risposta

7

non il suo il metodo più veloce, ma si può fare questo:

#include <string> 
#include <sstream> 
#include <iostream> 

template<typename ValueType> 
std::string stringulate(ValueType v) 
{ 
    std::ostringstream oss; 
    oss << v; 
    return oss.str(); 
} 

int main() 
{ 
    std::cout << ("string value: " + stringulate(5.98)) << '\n'; 
} 
1

È possibile utilizzare stringstream.

#include <string> 
#include <sstream> 
#include <iostream> 
using namespace std; 

int main() { 
    int num = 12345; 
    stringstream ss; 
    ss << num; 
    string str; 
    ss >> str; 
    cout << str << endl; 
    return 0; 
} 
+0

scusami, già risolto. – songziming

1

Si potrebbe rotolare la propria funzione per farlo.

std::string convert_int_to_string (int x) { 
    if (x < 0) 
    return std::string("-") + convert_int_to_string(-x); 
    if (x < 10) 
    return std::string(1, x + '0'); 
    return convert_int_to_string(x/10) + convert_int_to_string(x%10); 
} 
+0

Perché farlo quando C/C++ ha già tali funzioni? –

+2

"Potresti"! = "Dovresti". Basta sottolineare un'altra possibile cosa. –

+0

@GregHewgill, non lo farà. Vedi http://ideone.com/tyvjms per l'esempio in esecuzione. –

4

Mi piacerebbe rispondere in modo diverso: basta ottenere mingw-w64.

Scherzi a parte, mingw32 è così pieno di problemi che non è nemmeno divertente:

Con MinGW-W64 si ottiene gratuitamente:

  • il supporto per il punto di ingresso di Windows Unicode (wmain/wWinMain)
  • meglio C99 supporto
  • migliore C++ 11 di supporto (come si vede nella tua domanda!)
  • grande supporto per file
  • supporto per C + +11 thread
  • supporto per Windows 64 bit
  • cross compilazione! così puoi lavorare sulla tua app Windows sulla tua piattaforma preferita.
+0

A partire da MinGW-w64 4.9.2, è supportato anche C++ 14 (e C11 anche IIRC). – Chnossos

+0

Ok, mi hai convinto haha ​​.. Lo disinstallerò e scaricherò mingw-w64. –

0

Nonostante il fatto che le risposte precedenti sono meglio io voglio dare un'altra possibilità di implementare un INT al metodo di stringa che segue il successivo codice di vecchia scuola:

#include <string> 

std::string int2string(int value) { 
    char buffer[20]; // Max num of digits for 64 bit number 
    sprintf(buffer,"%d", value); 
    return std::string(buffer); 
} 
+0

causerà un buffer overflow su un sistema con interi a 64 bit –

+0

Nop, Allucinante 64bit ha bisogno di 19 cifre (nell'esempio ci sono 20 buffer di cifre) 9,223,372,036,854,775,807 (19 cifre) – omotto

+0

ti sei dimenticato il segno meno –

Problemi correlati