0Pricing
C++ Academy · Lekcja

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); // 255

stol stoll stoul stoull

Warianty dla pozostałych typów całkowitoliczbowych:

  • std::stol — long
  • std::stoll — long long
  • std::stoul — unsigned long
  • std::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

  1. std::string a tablice znaków w stylu C
  2. Operacje na ciągach: concat, substr, find, replace
  3. Strumień napisów stringstream do parsowania
  4. Konwersja ciągów: to_string i stoi
← Powrót do C++ Academy