Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Corrispettivo di
Forum - C/C++ - Corrispettivo di "sprintf" per C++?

Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 13:33
Mercoledì, 05/05/2010
Ciao a tutti! Il mio problema è il seguente: A partire da un intero, vorrei ottenere una stringa composta da: alcuni caratteri + il numero dato formattato in modo che sia composto da sole tre cifre (aggiungendo eventuali zeri se le cifre sono due o meno) + altri caratteri. In normali condizioni avrei risolto il problema tramite "sprintf":

Codice sorgente - presumibilmente C/C++

  1. int num = 12;
  2. char str[22];
  3.  
  4. sprintf(str, "caratteri%03dcaratteri", num); // output: caratteri012caratteri



Per motivi di eleganza di codice mi domandavo se esistesse un metodo più C++ (evitando l'uso di sprintf) per formattare numeri all'interno di stringhe. Se poi le stringhe che contornano il numero da formattare fossero di lunghezza variabile, il codice risultante sarebbe davvero orribile da vedere. Mi sembra impossibile che le librerie standard del C++, con i loro eleganti operatori << e >> non permettano la formattazione dei numeri. Pensavo quindi a "stringstream", ma non ho trovato molta documentazione riguardo la formattazione di numeri. Avete qualche suggerimento? Altrimenti mi vedo costretto ad usare una schifezza del genere:

Codice sorgente - presumibilmente Plain Text

  1. std::stringstream str;
  2. str << "caratteri" << (num >= 100 ? "00" : (num >= 10 ? "0" : "")) << num << "caratteri";



So resistere a tutto, tranne che alle tentazioni. - Oscar Wilde
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:29
Mercoledì, 05/05/2010
Codice sorgente - presumibilmente C/C++

  1. #include <iostream>
  2. #include <sstream>
  3. #include <iomanip>



e poi

Codice sorgente - presumibilmente Plain Text

  1. str << "caratteri" << setw(3) << setfill('0') << num << "caratteri";




Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 14:31
Mercoledì, 05/05/2010
Grazie mille, molto utile e pulito!


So resistere a tutto, tranne che alle tentazioni. - Oscar Wilde
PM Quote