Přehled funkcí std::stoi, std::stol, std::stoll, std::stoul, std::stoull, std::stof, std::stod a std::stold

Funkce z rodiny std::stoX poskytují v jazyce C++ efektivní způsob převodu řetězců na číselné hodnoty. Tyto funkce jsou součástí standardní knihovny <string> a umožňují snadný převod textových dat na různé číselné typy, což je užitečné například při zpracování vstupů od uživatele nebo při práci s daty z externích zdrojů. V tomto článku si podrobněji rozebereme jednotlivé funkce, jejich použití a specifika.


1. std::stoi

Funkce std::stoi převádí řetězec na celočíselnou hodnotu typu int. Její použití je jednoduché:

#include <string>
#include <iostream>

int main() {
    std::string str = "123";
    int value = std::stoi(str);
    std::cout << "Hodnota: " << value << std::endl;
    return 0;
}

Parametry:

  • str: Řetězec, který má být převeden.
  • pos (volitelný): Ukazatel na index, kde převod skončil.
  • base (volitelný): Číselná soustava (např. 10 pro desítkovou, 16 pro šestnáctkovou).

2. std::stol

Funkce std::stol převádí řetězec na hodnotu typu long. Používá se obdobně jako std::stoi, ale je vhodná pro větší čísla:

std::string str = "123456789";
long value = std::stol(str);

3. std::stoll

Funkce std::stoll převádí řetězec na hodnotu typu long long, což umožňuje práci s ještě většími čísly:

std::string str = "9223372036854775807";
long long value = std::stoll(str);

4. std::stoul

Funkce std::stoul převádí řetězec na hodnotu typu unsigned long. Je vhodná pro práci s nezápornými čísly:

std::string str = "4294967295";
unsigned long value = std::stoul(str);

5. std::stoull

Funkce std::stoull převádí řetězec na hodnotu typu unsigned long long. Používá se pro extrémně velká nezáporná čísla:

std::string str = "18446744073709551615";
unsigned long long value = std::stoull(str);

6. std::stof

Funkce std::stof převádí řetězec na hodnotu typu float. Je užitečná při práci s desetinnými čísly:

std::string str = "3.14";
float value = std::stof(str);

7. std::stod

Funkce std::stod převádí řetězec na hodnotu typu double. Používá se pro přesnější desetinné hodnoty:

std::string str = "2.718281828";
double value = std::stod(str);

8. std::stold

Funkce std::stold převádí řetězec na hodnotu typu long double. Je vhodná pro extrémně přesné výpočty:

std::string str = "1.618033988749894";
long double value = std::stold(str);

Společné vlastnosti

  • Výjimky: Pokud řetězec nelze převést, funkce vyvolají výjimku std::invalid_argument. Pokud je hodnota mimo rozsah cílového typu, vyvolá se std::out_of_range.
  • Základní číselná soustava: Funkce podporují různé číselné soustavy (např. binární, osmičkovou, šestnáctkovou) pomocí parametru base.

Závěr

Funkce std::stoi, std::stol, std::stoll, std::stoul, std::stoull, std::stof, std::stod a std::stold jsou nepostradatelnými nástroji pro převod řetězců na číselné hodnoty v C++. Každá z nich má své specifické použití v závislosti na požadovaném datovém typu a rozsahu hodnot. Při jejich použití je důležité myslet na možné výjimky a správně ošetřit vstupy.

ai (1) architekt (1) Bash (2) bitwig (2) bitwig6 (1) c++ (54) cheatsheet (1) clang-format (1) class (1) cmake (3) cmake-format (1) conan (2) constexpr if (1) cz (2) daw (2) decltype(x) (1) desktop (2) duševní zdraví (1) email (1) emoce (4) enum (1) enum class (1) functor (1) git (1) gnome (4) gnome-extension (1) helloworld (2) hranice (1) js (1) keyboard (2) linux (6) llm (1) lvalue (1) metodika řízení (2) midi (2) modern c++ (48) motivace (1) music (6) music production (1) native instruments (1) nodiscard (1) noexcept (1) operator (1) osobnost (1) osobní hranice (1) override (1) package manager (1) Perfect Forwarding (1) plugin (1) poděkování (1) polymorfism (1) prospěch (1) psyché (2) python (2) rspamd (1) rvalue (1) růst (2) scale (2) self-stress (1) sociální sítě (1) software (1) spam (1) std (28) std::accumulate (1) std::async (2) std::divides (1) std::filesystem::path (2) std::forward (1) std::future (3) std::istream_iterator (1) std::latch (1) std::lerp (1) std::minus (1) std::modulus (1) std::multiplies (1) std::negate (1) std::ostream_iterator (1) std::packaged_task (1) std::partition (1) std::partition_copy (1) std::plus (1) std::promise (2) std::shiftleft (1) std::shuffle (1) std::transform (1) std::tuple (1) std::variant (1) std::views::transform (1) std::visit (1) strach (1) strategie (1) synthesizer (1) toxic (2) toxicita (1) toxík (1) using (2) vztah k sobě (1) vztahy (3) vývoj (1) zdraví (2)