std::stoi
Megjelenés
Főnév
std::stoi (tsz. std::stois)
- (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
strnem alakítható át, akkorstd::invalid_argumentkivételt dob. - Ha az érték túl nagy egy
intszámára, akkorstd::out_of_rangekivé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::stoikarakterlá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.
idxparaméterrel megadható, hogy hány karaktert dolgozott fel.- Hibakezelés: ha a bemenet nem szám vagy túl nagy, kivételt dob.