Conversioni varie

Tutta l'informatica

Conversioni varie

Messaggioda RadomE » mer giu 22, 2005 1:46 pm

Come posso convertire un long int in una stringa in C++? (premessa la itoa non esiste)
E un size_t in un unsigned int?
:triste:
Si ricordano le idee ma non gli uomini, gli uomini muoiono le idee sono eterne. Ho visto gente uccidere in nome delle idee, li ho visti morire per difenderle. Ma non si pu? abbracciare un'idea, non la si pu? baciare. Le idee non sanguinano, non provano dolore. Le idee non amano.
Avatar utente
RadomE

Eroe
 
Messaggi: 820
Iscritto il: ven gen 10, 2003 12:02 pm
Località: Mi considero cittadino del mondo...WOW

Re: Conversioni varie

Messaggioda Trix180 » mer giu 22, 2005 4:54 pm

RadomE ha scritto:Come posso convertire un long int in una stringa in C++? (premessa la itoa non esiste)


mmm... dunque se stai usando il tipo String mi sembra di ricordare un costruttore però per double che ti fa la conversione, puoi dare un occhiata in giro se c'è anche per long int. o forse c' anche una GetInt o qualcosa di simile.

se no te la scrivi non dovrebbe essere dura.

E un size_t in un unsigned int?
:triste:


dunque size_t è un unsigned long, potresti provare con un cast (naturalmente con i rischi che ne conseguono)
[Trix180]
God invented man, and man invented the metric system.

La guerra e' pace
La liberta' e' schiavitu'
L'ignoranza e' forza

la religione ? l'oppio del popolo.

Jane, da quando ti ho conosciuto faccio caso alle piccole cose delle vita, gli uccellini che cinguettano, la rugiada che si spande tra le foglie, i semafori...
[/Trix180]
Avatar utente
Trix180

Maestro
 
Messaggi: 453
Iscritto il: sab mar 27, 2004 7:46 pm
Località: Val Di Taro

Re: Conversioni varie

Messaggioda riko » gio giu 23, 2005 12:17 am

Il modo piu` C++ e piu` tipico, in stile abbattiamo le zanzare con le testate termonucleari e`:

beh... ti do un esempio fatto.


Codice: Seleziona tutto
#include <iostream>
#include <sstream>

int main(){
    int i = 8;
    double d = 6.7878;
   
    std::stringstream S;
    S << i << " " << d;
   
    std::string s = S.str();
   
    std::cout << s << std::endl;
   
    return 0;
}
   



Nota che pur usando classi cazzute e potenti come stringstream, le prestazioni sono ottime. Codice tipo
Codice: Seleziona tutto
#include <iostream>
#include <fstream>
#include <sstream>


int main(){
        std::stringstream ss;
        std::string s;
        for(int i=0; i< 20000; ++i){
        ss << i;
    }
    s = ss.str();
    return 0;
}

E` prestazionalmente analogo all'equivalente C, se non a volte piu` veloce.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda RadomE » gio giu 23, 2005 3:47 pm

Grazie, pare proprio che sia l'unico modo, cmq non capisco cosa aspettano a fare una comodissima itoa :no:
Si ricordano le idee ma non gli uomini, gli uomini muoiono le idee sono eterne. Ho visto gente uccidere in nome delle idee, li ho visti morire per difenderle. Ma non si pu? abbracciare un'idea, non la si pu? baciare. Le idee non sanguinano, non provano dolore. Le idee non amano.
Avatar utente
RadomE

Eroe
 
Messaggi: 820
Iscritto il: ven gen 10, 2003 12:02 pm
Località: Mi considero cittadino del mondo...WOW

Messaggioda zakplus » ven giu 24, 2005 2:15 am

Per convertire long int in string puoi usare sscanf:
Codice: Seleziona tutto
int  sscanf( char *stringa, "%ld", long int variabile_longint );

Per convertire size_t in unsigned int sono daccordo per il cast, prendendosi le contromisure.
Godetevi ogni illusione...

www.zakplus.altervista.org
Avatar utente
zakplus

Veterano
 
Messaggi: 297
Iscritto il: ven set 03, 2004 11:43 pm
Località: Livorno

Messaggioda riko » ven giu 24, 2005 10:44 am

zakplus ha scritto:Per convertire long int in string puoi usare sscanf:
Codice: Seleziona tutto
int  sscanf( char *stringa, "%ld", long int variabile_longint );

Per convertire size_t in unsigned int sono daccordo per il cast, prendendosi le contromisure.


Beh, sscanf e` pur sempre una funzione della libreria standard del C, quindi quando possibile sarebbe da preferire una soluzione C++ nativa.
E visto come sono facili da usare gli sstream...

Ad ogni modo io sscanf l'avevo gia` vista da tempo sconsigliata in favore di altre soluzione (ma credo fosse per il giochetto inverso).
Comunque atoi e` ora parte dello standard C99. In breve quindi (se non gia` ora) sara` disponibile su ogni piattaforma.
Anche se temo che lo standard C++ (ma non consco in dettaglio l'ultimissima revisione) prende a base C89. Dovrei controllare.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda zakplus » ven giu 24, 2005 12:55 pm

riko ha scritto:Beh, sscanf e` pur sempre una funzione della libreria standard del C, quindi quando possibile sarebbe da preferire una soluzione C++ nativa.

Eh si, sono abituato ad usare solo il C :scherza: ma prevedo di espandermi anche al C++ :annu:

PS: riko, bell'avatar :ahah:
Godetevi ogni illusione...

www.zakplus.altervista.org
Avatar utente
zakplus

Veterano
 
Messaggi: 297
Iscritto il: ven set 03, 2004 11:43 pm
Località: Livorno

Messaggioda riko » ven giu 24, 2005 2:06 pm

zakplus ha scritto:Eh si, sono abituato ad usare solo il C :scherza: ma prevedo di espandermi anche al C++ :annu:


Un consiglio da "esperto" (non che abbia l'ardire di definirmi tale, ben inteso). *Dimentica* il C, se vuoi programmare in C++. Affrontalo come un linguaggio totalmente diverso.
Grosso modo quasi tutto quello che e` lecito fare in C e consigliato, se fatto in C++, pur essendo lecito per il compilatore, e` un grosso errore di programmazione.
Se usi macro con parametri, vuole dire che hai sbagliato qualcosa. Se fai troppi cast, vuole dire che hai sbagliato qualcosa. Se usi i cast stile C invece che quelli stile C++ stai sbagliando qualcosa.
Insomma... il C++ e` un linguaggio molto piu` complesso del C (da imparare), ha molte piu` regole, molti piu` costrutti. Prende tempo (e da soddisfazione, permette solidita` di codice incredibile).

Non partire con un libraccio. Cancella il Deitel & Deitel. Brucia lo Schmidt.
Il miglior libro per iniziare in C++ e` "Corso di Programmazione" (C++ Primer in inglese) di Lippman, Lajole e altri. A me piace di piu` lo Stroustrup, ma fai conto che e` un poco piu` difficile per come procede.
Un altro ottimo testo e` quello di Eckel, disponibile anche in rete.

Spendi molto tempo lavorando con le strutture dati. Esercitati a scrivere contenitori e allocatori (per capire a fondo come funziona la gestione della memoria), stream. Progetta gerarchie di classi, semplificale. Impara ad usare l'ereditarieta` astratta, poi prova a trasferire buona parte del codice usando templates ed eventualmente traits.
A questo punto buttati pure sulle GUI e simili. Il C++ se imparato "male" e` assolutamente letale per te e per gli altri,.

E ricorda. Quello che sai in C, conta poco. C e C++ non sono lo stesso linguaggio, e contrariamente a quanto si dice, non sono nemmeno simili. :ride:

PS: riko, bell'avatar :ahah:


Quando e` amore e` amore :ride:.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda zakplus » ven giu 24, 2005 3:46 pm

Grazie per i suggerimenti, li apprezzo molto.
Avere del buon materiale di studio su cui basarsi è essenziale, se prendi abitudini sbagliate all'inizio poi non te le levi più.

La programmazione oo mi piace molto, ma la mia unica esperienza in campo è Java (traumatico... bah!) bisogna che mi metta sotto :felice:
Godetevi ogni illusione...

www.zakplus.altervista.org
Avatar utente
zakplus

Veterano
 
Messaggi: 297
Iscritto il: ven set 03, 2004 11:43 pm
Località: Livorno

Messaggioda riko » sab giu 25, 2005 12:09 am

zakplus ha scritto:La programmazione oo mi piace molto, ma la mia unica esperienza in campo è Java (traumatico... bah!) bisogna che mi metta sotto :felice:


Se ti interessi, gli approcci piu` interessanti alla OOP li ho trovati in Python e ObjectiveC. Complessivamente ti consiglio di guardare il primo, il secondo e` bellissimo, ma e` diffuso quasi solo su MacOS. E` disponibile come parte del gcc ovunque, ma una buona parte della libreria che lo rende cosi` bello c'e` solo per MacOS (oppure sbattendosi un po' con GNUStep).

Comunque vai di Python.
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City

Messaggioda zakplus » sab giu 25, 2005 3:48 pm

He, he! Python mi stuzzica ed ho già visto qualcosa... :felice:
Appena ho un po' di tempo approfondisco, mi piacerebbe provare a fare qualcosa di combinato Python-C++
Godetevi ogni illusione...

www.zakplus.altervista.org
Avatar utente
zakplus

Veterano
 
Messaggi: 297
Iscritto il: ven set 03, 2004 11:43 pm
Località: Livorno

Messaggioda riko » dom lug 03, 2005 1:19 pm

zakplus ha scritto:Appena ho un po' di tempo approfondisco, mi piacerebbe provare a fare qualcosa di combinato Python-C++


Ci sono due sistemi principali. Boost Python e usare le API C/C++ di Python. In pratica puoi estendere Python in C++.

Ma prima di farlo bisogna conoscere *molto* bene sia Python che C++, purtroppo. Si fa, ma non e` una delle cose piu` semplici.
Secondo test empirici estendere Python in C++ invece che in Python stesso e` oltre 10 volte piu` lento (in termini di tempo di coding) ed la velocita` guadagnata non e` spesso apprezzabile (a meno che in casi particolari, vedi videogiochi, oppure calcolo scientifico)
-enrico
fibs = 0 : 1: [ a + b | (a, b) <- zip fibs (tail fibs) ]


Akropolix: Community OFF-TOPIC di IKSnet
http://www.akropolix.net/forum

"se do da mangiare a un affamato mi dicono che sono un santo, se mi chiedo perch? ? affamato mi dicono che sono un comunista" (Helder C?mara, Arcivescovo di Recife)
Avatar utente
riko

Supremo
 
Messaggi: 3329
Iscritto il: gio mar 04, 2004 4:28 pm
Località: Chiba City


Torna a Tecnologia, internet, coding

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti