Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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";


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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!

PM Quote