Konwersja ciągów: to_string i stoi
Proszę bezpiecznie konwertować ciągi znaków i typy liczbowe za pomocą std::to_string, std::stoi i std::stod.
Konwersja ciągów: to_string i stoi to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Dlaczego konwersje ciągów znaków są ważne
Ciągle trzeba konwertować liczby na tekst i tekst na liczby — na przykład podczas obsługi danych wprowadzanych przez użytkownika, plików konfiguracyjnych, JSON-a, adresów URL i logów.
std::to_string
std::to_string konwertuje dowolny wbudowany typ liczbowy na ciąg znaków. Stosuje domyślne formatowanie.
#include <string>
std::string a = std::to_string(42); // "42"
std::string b = std::to_string(-7); // "-7"
std::string c = std::to_string(3.14); // "3.140000"Domyślne formatowanie liczb zmiennoprzecinkowych
to_string dla typu double używa sześciu miejsc po przecinku. Aby dokładnie kontrolować format, użyj std::stringstream z std::fixed i std::setprecision albo std::format w C++20.
std::stoi: ciąg znaków na int
Parsuj liczbę całkowitą za pomocą std::stoi. Pomija początkowe białe znaki i zatrzymuje się przy pierwszym znaku niebędącym cyfrą.
int n = std::stoi("42"); // 42
int m = std::stoi(" -7abc"); // -7 (stops at 'a')Odczytywanie pozycji końcowej
Przekaż wskaźnik, aby otrzymać indeks, na którym zakończyło się parsowanie — jest to przydatne podczas parsowania mieszanych ciągów znaków.
std::string s = "42px";
size_t pos;
int n = std::stoi(s, &pos);
std::cout << pos; // 2 (parsed "42", stopped at 'p')Stoi zgłasza wyjątek dla nieprawidłowych danych
Jeśli nie znaleziono żadnych cyfr, stoi zgłasza wyjątek std::invalid_argument. Jeśli wystąpi przepełnienie liczby, zgłasza wyjątek std::out_of_range.
try {
int x = std::stoi("not_a_number");
} catch (const std::invalid_argument& e) {
std::cout << "Parse failed";
}Konwersje między systemami liczbowymi
Trzeci argument wybiera podstawę systemu liczbowego (2–36). Przekaż 0, aby automatycznie rozpoznać ją na podstawie prefiksu.
int hex = std::stoi("ff", nullptr, 16); // 255
int bin = std::stoi("1010", nullptr, 2); // 10
int auto_detect = std::stoi("0xff", nullptr, 0); // 255stol stoll stoul stoull
Warianty dla pozostałych typów całkowitoliczbowych:
std::stol— longstd::stoll— long longstd::stoul— unsigned longstd::stoull— unsigned long long
stof stod stold
Warianty dla typów zmiennoprzecinkowych float, double i long double.
double d = std::stod("3.14159");
float f = std::stof("2.71");C++17 std::from_chars: bez wyjątków
std::from_chars parsuje dane bez zgłaszania wyjątków. Zwraca strukturę zawierającą ec (kod błędu) i ptr (pozycję końca parsowania) — jest preferowane w często wykonywanych pętlach.
#include <charconv>
std::string s = "42";
int val;
auto result = std::from_chars(s.data(), s.data() + s.size(), val);
if (result.ec == std::errc{}) {
// success
}C++17 std::to_chars: bez alokacji
Odwrotność from_chars — zapisuje liczbę do bufora bez alokowania pamięci. To najszybsza konwersja dostępna w bibliotece standardowej.
Szybkie sprawdzenie
Jaki wyjątek zgłasza std::stoi("abc")?
Podsumowanie
std::to_string konwertuje liczby na ciągi znaków, a std::stoi i funkcje pokrewne parsują ciągi znaków na liczby. Obie grupy zgłaszają wyjątki w razie niepowodzenia — do wydajnego parsowania bez wyjątków używaj std::from_chars.
Często zadawane pytania
Czy lekcja „Konwersja ciągów: to_string i stoi” jest bezpłatna?
Tak — pełny tekst „Konwersja ciągów: to_string i stoi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Konwersja ciągów: to_string i stoi”?
Proszę bezpiecznie konwertować ciągi znaków i typy liczbowe za pomocą std::to_string, std::stoi i std::stod. Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Konwersja ciągów: to_string i stoi”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- std::string a tablice znaków w stylu C
- Operacje na ciągach: concat, substr, find, replace
- Strumień napisów stringstream do parsowania
- Konwersja ciągów: to_string i stoi