Newsgroup: it.comp.lang.c++
Titolo: int -->string

Ciao a tutti;
come si converte un oggetto int, in un oggetto string?
Per fare string-->int esiste la funzione atoi();ma il viceversa?

Cristian C. wrote:

itoa se vuoi utilizzare la libreria C.
Se vuoi utilizzare il c++ invece con gli stringstream.
#include <iostream>
#include <sstream>
int main()
{
     int i = 5;
     std::ostringstream o;
     o << i;
     std::string i_string = o.str();
}
Ciao Fbf.

ma il viceversa?
Non esiste una funzione predefinita :(
Farsela pero' non costa molto... ad esempio un sistema molto
usato e' ...
   std::string to_string(int x)
   {
     char buf[QUANTO_BASTA];
     sprintf(buf,"%i",x);
     return buf;
   }
Sicuramente "brutto"... ma costa poche righe e non e'
assurdamente lento. Una versione un po' piu' performante
ma che richiede qualche riga in piu' (ma non necessita
di stdio e di sprintf) potrebbe essere
   std::string to_string(int x)
   {
     char buf[QUANTO_BASTA],*p=buf+sizeof(buf);
     bool neg=(x<0);
     if (neg) x=-x;
     *--p='\0';
     do { *--p="0123456789"[x%10]; x/=10; } while(x);
     if (neg) *--p='-';
     return std::string(p);
   }
   //
   // Nota di colore
   //
   // Quando ho scritto questa routine avevo utilizzato
   // il costruttore che accetta due puntatori a carattere
   // invece di quello che usa un puntatore solo... in
   // pratica diventa inutile il tappo
   //
   //     *--p='\0'/;
   //
   // e lo statement finale diventa
   //
   //     return std::string(p,buf+sizeof(buf));
   //
   // Per qualche strana ragione pero' questo approccio e',
   // con BCC55, *nettamente* piu' lento (cosa che trovo
   // molto illogica). Qualcuno ha idea del motivo ?
   //
Ho visto anche spesso proporre di usare ostringstream per fare
questo lavoro (#include <sstream>). Con i compilatori che uso
io si tratta di una soluzione ignobilmente pesante (e la cosa
non mi stupisce visto il casino che tirano in ballo)... e'
qualcosa del tipo...
   std::string to_string(int x)
   {
     std::ostringstream o;
     o << x;
     return o.str();
   }
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Se vuoi utilizzare il c++ invece con gli stringstream.
Ouch...
e perche' a questo punto non mandare una richiesta XML
via SOAP ad un server internet scritto in VB che usando
STR$ ti restituisce quanto chiesto in (poco) meno di
un secondo ? :)


 un secondo ? :)
Perche' il server e' ancora in beta :-)
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 Per fare string-->int esiste la funzione atoi();ma il viceversa?
int i = 42;
char buf[10];
std::ostrstream(buf) s;
s << i;
e leggi dentro buf[].
Oppure, se ti basta il semplice C:
sprintf(buf,"%d",i);
Massimo

itoa se vuoi utilizzare la libreria C.
itoa non esiste in C.
sprintf, invece, si'.

 itoa se vuoi utilizzare la libreria C.
itoa non è standard.
EMG

 ha scritto nel messaggio
news:OQZF6.2541$Hp1....@news2.tin.it...


 Per fare string-->int esiste la funzione atoi();ma il viceversa?
Premessa: pare che utilizzare le conversioni implicite come in questo
caso sia da considerare una cattiva pratica di programmazione, per via
delle trasformazioni non volute che il compilatore potrebbe effettuare
all'insaputa del programmatore e, più  in generale, sugli effetti che
essi hanno sulle regole del type-checking del c++. Nel caso in
particolare, mi sembra la forma più comoda, così te la propongo:
#include <string>
#include <sstream>
class int2string
{
    std::string s_;
public:
    int2string( int i)
    {
        std::ostringstream ss;
        ss << i;
        s_ = ss.str();
    }
    operator std::string()    {    return s_;}
};
#include <iostream>
int main()
{
    int a = 3;
    std::string s = int2string( a);
    s += " è il numero nella variabile a";
    std::cout << s << std::endl;
};