Miten saa merkkijonoon luetut numerot muutettua int-muotoon?
Nyt esimerkiksi taulukon ensimmäinen numero on neljä, joka sijoitettuna int-muuttujaan saa arvon 52 (ASCII-koodi).
Atoi() antoi jotain ihan ihme lukuja ja numeroita ei voi alussa lukea int-taulukkoon vaan ne luetaan tiedostosta
char-taulukkoon.
Merkkejä voi myös ajatella numeroina. ASCII-merkistössä numeromerkit ovat koodeilla 48 - 57, jolloin merkki '4' on arvoltaan 52. Numeroa vastaavan merkin voi siksi muuttaa todelliseksi numeroksi vähentämällä sen arvosta 48.
char merkki = '4'; int numero; numero = merkki - 48;
Molemmat char ja int ovat siis kokonaislukutyyppejä, vaikka char-muuttujat tavallisesti ajatellaan merkkeinä.
int Luvuksi(char* Teksti) { int Result = 0, Kohta; bool Neg = false; if (Teksti[0] == '-') { Neg = true; Kohta = 1; } else Kohta = 0; for (; Kohta < 11; Kohta++) { if (Teksti[Kohta] == 0) break; Result = 10 * Result + Teksti[Kohta] - 48; } if (Neg) return -Result; return Result; }
Siinäpä se.
Edit: Kohta < 11 koska tekstinä pisin int-luku on -2147483648, jossa on 11 merkkiä.
Enpä olisi uskonut saavani oikein ihan vain kirjoittamalla suoraan tuohon. Pitääkin kirjoittaa ylös jonnekin muuallekin...
Kysymyksen tarkentaminen olisi paikallaan (ellei Laaksosen / Metabolix:n hommat sattuneet auttamaan, Metabolix:n koodi tekee melkolailla saman mitä atoi:kin).
atoi ja itoa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.