2011-12-20 9 views
9

Come eseguire numeri interi -> la conversione di stringhe ha ricevuto risposta molte volte su Internet ... tuttavia, sto cercando il modo più compatto "C++-way" per farlo.intero alla conversione stringa/concatenazione stringa intera in C++ - soluzioni più compatte?

Dal momento che siete in grado di concatenare le stringhe utilizzando l'operatore + sovraccarico, sarebbe preferibile essere in grado di fare qualcosa sulla falsariga del python-ish x = (stringvariable + str (intVariable)) concatenazione, ma Non so se c'è un modo canonico per farlo in C++.

soluzioni

Il più comune che vedo sono:

stringstream: Se possibile, sarebbe bello non avere 3 linee di codice (dichiarazione, scrivendo al flusso, la conversione a stringa) solo per concatenare alcune lettere e numeri.

itoa: funziona, ma sto cercando una soluzione C++ canonica. Inoltre, penso che itoa sia tecnicamente non standard, anche se potrei sbagliarmi.

boost boost/boost cast lessicale: anche questo funziona, ma non c'è nulla in C++ vanilla che fa il lavoro?

+3

Si noti che i diagrammi di stringa effettivamente fanno il lavoro. Suggerimento: non inventare (non) problemi. :) – Kos

+1

@Kos Solo un mio caro, ma il suo 'std :: ostringstream' che fa il lavoro qui. –

+0

@JamesKanze: Per fare il vero, il vero lavoro di conversione viene eseguito nell'appropriato 'operatore <<' su ostreams. – PlasmaHH

risposta

17
#include <string> 

stringa a intero: int n = std::stoi(s);

intero a stringa: std::string s = std::to_string(n);

+0

Cool, l'ennesima nuova funzione che non ho ancora conosciuto (vale la pena ricordare che non è ufficialmente nemmeno un anno e che alcuni compilatori o compilatori potrebbero non averlo capito!). – Kos

+0

@Kos: ufficialmente ha 3,5 mesi;) (2011-09-01) – PlasmaHH

+0

C++ 11 sta rendendo il mio codice molto più manutenibile. Spero che essere un early adopter non ritorni a mordermi (in termini di supporto del compilatore, standard di codifica aziendale, ecc.). – daj

0

Qual è il problema di avere 3 linee per convertire? Se è necessario utilizzare lo stesso tipo di concatenazione in qualsiasi momento, basta metterlo in una funzione ed è fatto. Sarebbe meglio che usare strane soluzioni.

2

stringVariable + boost::lexical_cast<std::string>(intVariable) farebbe il trucco, ma non sono sicuro che sia una buona idea. Anche in Python, qualcosa come '{}{:6f}'.format(stringVariable, intVariable) sarebbe molto più comune.

4

C++ 11 ha std::to_string, ma in C++ 03 non esiste una "soluzione di chiamata a singola funzione". Anche boost::lexical_cast (anche se specializzato per determinati casi) e std::to_string in definitiva chiama operator<<(std::ostream&,T) per ogni T che dovrebbero convertire. Si tratta di essere in grado di gestire genericamente le cose, e quando op<< è già lì, perché non riutilizzarlo per creare una rappresentazione di stringa?

Problemi correlati