[C++] Convertire int in stringha e viceversa

HeroGian
Salve a tutti, sto scrivendo un programma dotato di interfaccia grafica per mezzo delle GTK, sono arrivato ad un punto in cui ho la necessità di convertire interi in stringhe e viceversa, in modo tale da poterli scrivere su delle label e leggerli da delle entry.
Cercando un po su internet ho trovato la funzione sprintf, ma non mi convince molto come soluzione.. Ho visto in giro che si può convertire anche grazie ad un ostringstream, ma non ho capito come funziona.. Potreste aiutarmi?.. Ci sono modi migliori per farlo??
Grazie

Risposte
claudio862
std::stringstream si usa in questo modo:

const std::string s = "1234";
std::ostringstream oStream(s); // Crea uno stream contenente la stringa s
int i;
oStream >> i; // Estrae un intero dallo stream

std::istringstream iStream; // Crea uno stream vuoto
iStream << i; // Inserisce un intero nello stream
const std::string s2 = iStream.str(); // Restituisce il testo contenuto nello stream


Puoi scriverti due semplici funzioni per convertire da stringhe a qualsiasi cosa e viceversa (queste non hanno nessuna gestione degli errori, ma potrebbero anche bastare):

#include <string>
#include <sstream>
#include <iostream>

template <typename T>
inline T to(const std::string & s)
{
    std::istringstream stream(s);
    T t;
    stream >> t;
    return t;
}

template <typename T>
inline std::string toString(const T & t)
{
    std::ostringstream stream;
    stream << t;
    return stream.str();
}

int main()
{
    const double a = 123.456;
    const int b = -46;
    const std::string c = "9876";

    const std::string as = toString(a);
    const std::string bs = toString(b);

    const int cs1 = to<int>(c);
    const double cs2 = to<double>(c);

    std::cout << "as: " << as << '\n';
    std::cout << "bs: " << bs << '\n';
    std::cout << "cs1: " << cs1 << '\n';
    std::cout << "cs2: " << cs2 << '\n';
}

HeroGian
Grazie per l'aiuto!, sono riuscito a convertire in stringa e viceversa.. il problema è che non riesco comunque a scrivere la stringa convertita sulla label, perchè mi dice che il testo passato ad essa deve essere di tipo const gchar* e non string... come posso fare??

apatriarca
Usa la funzione membro c_str della classe std::string oppure sprintf con dei semplici array di char di dimensione fissa (se non sbaglio dovrebbero essere sufficienti anche solo 12 caratteri per un numero intero a 32 bit).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.