Elikkä, olisikohan jossain jotain valmista listaa missä näkyisi tapoja convertata eri tietotyypit kaikkiin yleisimpiin muotoihin (int, double, long, string...)? Helpottaisi kummasti aina kun vaikka tulostaisi lapuskan missä näkyisi nuo.
Tahtoo aina keskeytyä juuri soodaukset johonkin converttausongelmaan, kun pitää ruveta guuglettamaan neuvoja, kun ei tuolta visual studion msdn:stä tahdo löytyä kaikkea (tai sitten en vaan osaa).
Erityisesti nyt tosin olisi hakusessa stringin converttaus integeriksi.
Hoover kirjoitti:
Erityisesti nyt olisi hakusessa tosin tuo stringin converttaus integeriksi.
Jonkinlainen ratkaisu on se, että käytät C:n atoi-funktiota ja sille annat parametrina stringi.c_str():n.
Opettele sscanf():n ja sprintf():n käyttö niin konvertoinnit onnistuvat luvuista stringiksi ja takaisin.
Jeps, näytti toimivan. Kiitoksia.
Yksi C++:n keino muuttaa tyyppiä jos toistakin on stringstream. Tässä omasta päästä kirjoitettu, toivottavasti toimiva template-funktio, joka muuntaa mitä tahansa, mitä streamiin syöttää:
#include <sstream> #include <string> template <class TTyyppiA, class TTyyppiB> void Muunna(TTyyppiA Lahde, TTyyppiB * Kohde) { std::stringstream Stream; // Stream-olio Stream << Lahde; // Syötetään arvo Stream >> *Kohde; // Luetaan arvo } int main(void) { std::string Str = "04.50"; double Dbl; Muunna(Str, &Dbl); // String doubleksi cout << Str << " = " << Dbl << endl; return 0; }
Jos muuttelee vain tietotyyppejä, voi ekaksi kokeilla ihan tavallista sijoitusta:
int i; double d; d = i;
Jos kääntäjä ei valittele mitään, on luultavasti tekemässä ihan järkeviä juttuja. Jos tulee valitusta, kuten tällaisista
short h; long l; double d; h = l; h = d;
on melko varmasti hukkaamassa jotakin tietoa. Jos tykkää, että tämä on kuitenkin ihan ok ja on asiastaan varma, voi castauksilla kertoa kääntäjälle, että ole sinä hiljaa, kyllä meikäkoodari tietää:
short h; long l; double d; h = static_cast<short>(l); h = static_cast<short>(d);
Jos on muuntelemassa tietoa stringeiksi tai takaisin, onkin oikeasti tekemässä tulostuksen muotoilua tai syötteen lukua. Homma menee heti paljon monimutkaisemmaksi, kun tarvii oikeastaan varautua maan tapoihin (niin kuin desimaalipilkku vastaan -piste) ja virheelliseen inputtiin. Siis sen lisäksi, että koodi on muutoin oikein.
Stringimuuntelut menevät melko mukavasti stream
-luokilla. Kannattaa suosia.
atoi
ei sitten pahemmin virheitä tarkastele. Jos välttämättä haluaa tehdä jutut C:mäisesti, kannattaa edes käyttää strto
X-perheen funkkareita.
sprintf
ja sscanf
ovat yleisiä pointterivirheiden ja puskuriylivuotojen lähteitä, joten siitä sitten vaan...
Aihe on jo aika vanha, joten et voi enää vastata siihen.