Ugrás a tartalomhoz

std::stoi

A Wikiszótárból, a nyitott szótárból


Főnév

std::stoi (tsz. std::stois)

  1. (informatika) A std::stoi (string to integer) egy C++ szabványos függvény, amely egy karakterláncot (string) alakít át egész számmá (int típussá). A függvény a <string> könyvtárban található, és a C++11 szabvány óta érhető el.



1. std::stoi szintaxisa

int stoi(const std::string& str, size_t* idx = 0, int base = 10);

Paraméterek:

  • str – Az átalakítandó szöveg (std::string).
  • idx (opcionális) – Egy mutató, amely az átalakítás után mutatja, hogy hány karaktert sikerült feldolgozni.
  • base (opcionális) – A számrendszer, amelyben a bemeneti érték van (pl. 10 = decimális, 16 = hexadecimális, 8 = oktális).

Visszatérési érték:

  • Egy egész szám (int), amely a karakterláncból konvertálódott.

Kivételdobás (std::invalid_argument és std::out_of_range):

  • Ha a str nem alakítható át, akkor std::invalid_argument kivételt dob.
  • Ha az érték túl nagy egy int számára, akkor std::out_of_range kivételt dob.



2. Egyszerű példa std::stoi használatára

#include <iostream>
#include <string>

using namespace std;

int main() {
    string szamStr = "1234";
    int szam = stoi(szamStr);

    cout << "Átalakított szám: " << szam << endl;

    return 0;
}

Kimenet:

Átalakított szám: 1234

3. Alapok kezelése (base paraméter)

A std::stoi képes különböző számrendszerekben megadott számokat is konvertálni.

#include <iostream>
#include <string>

using namespace std;

int main() {
    string hexStr = "1A3";
    string binStr = "1010";  
    string octStr = "27";    

    int hexSzam = stoi(hexStr, nullptr, 16); // Hexadecimális (16-os alap)
    int binSzam = stoi(binStr, nullptr, 2);  // Bináris (2-es alap)
    int octSzam = stoi(octStr, nullptr, 8);  // Oktális (8-as alap)

    cout << "Hexadecimális: " << hexSzam << endl;
    cout << "Bináris: " << binSzam << endl;
    cout << "Oktális: " << octSzam << endl;

    return 0;
}

Kimenet:

Hexadecimális: 419
Bináris: 10
Oktális: 23

4. idx paraméter használata

Az idx paraméter megadja, hogy a string hányadik karakteréig sikerült átalakítani.

#include <iostream>
#include <string>

using namespace std;

int main() {
    string szoveg = "123abc"; 
    size_t index = 0;
    
    int szam = stoi(szoveg, &index); // Csak az "123"-at alakítja át

    cout << "Átalakított szám: " << szam << endl;
    cout << "Első fel nem dolgozott karakter indexe: " << index << endl;

    return 0;
}

Kimenet:

Átalakított szám: 123
Első fel nem dolgozott karakter indexe: 3

Magyarázat: - A stoi("123abc", &index) csak az 123 részt alakítja át, és index = 3 lesz, mert az abc karakterek már nem számjegyek.



5. Kivételkezelés (std::invalid_argument és std::out_of_range)

Ha a bemeneti szöveg nem szám, vagy az érték túl nagy, akkor kivételt dob.

#include <iostream>
#include <string>

using namespace std;

int main() {
    try {
        string rosszSzam = "abc";  // Nem szám
        int szam = stoi(rosszSzam);
        cout << "Átalakított szám: " << szam << endl;
    } catch (const invalid_argument& e) {
        cout << "Hiba: Nem érvényes szám!" << endl;
    }

    try {
        string nagySzam = "999999999999999999999"; // Túl nagy szám
        int szam = stoi(nagySzam);
        cout << "Átalakított szám: " << szam << endl;
    } catch (const out_of_range& e) {
        cout << "Hiba: A szám túl nagy!" << endl;
    }

    return 0;
}

Kimenet:

Hiba: Nem érvényes szám!
Hiba: A szám túl nagy!

6. Összegzés

  • A std::stoi karakterláncból egész számmá alakít.
  • Alapértelmezett alap (base) = 10, de működik bináris, oktális és hexadecimális számokkal is.
  • idx paraméterrel megadható, hogy hány karaktert dolgozott fel.
  • Hibakezelés: ha a bemenet nem szám vagy túl nagy, kivételt dob.