0Pricing
C++ Academy · Lekcja

Strumień napisów stringstream do parsowania

Proszę używać std::stringstream do tokenizacji tekstu i parsowania go do wartości określonych typów.

Strumień napisów stringstream do parsowania to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 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.

Czym jest stringstream?

std::stringstream opakowuje ciąg znaków w interfejs strumienia iostream. Możesz odczytywać z niego i zapisywać do niego za pomocą >> i <<, tak jak z cin lub do cout.

#include <sstream>
std::stringstream ss;

Tworzenie ciągów za pomocą stringstream

Użyj go do tworzenia złożonych ciągów z wartości różnych typów. Wywołaj .str(), aby uzyskać wynik.

std::stringstream out;
out << "User: " << name << ", Age: " << age;
std::string result = out.str();

Parsowanie za pomocą stringstream

Zainicjalizuj go ciągiem znaków i pobieraj wartości za pomocą >>. Tokenizuje dane według białych znaków.

std::stringstream in("42 3.14 hello");
int i; double d; std::string s;
in >> i >> d >> s;

Wczytywanie wiersza do tokenów

Połącz getline ze stringstreamem, aby tokenizować jeden wiersz na raz.

std::string line = "1 2 3 4 5";
std::stringstream ss(line);
int n;
while (ss >> n) {
    std::cout << n * n << " ";
}
// 1 4 9 16 25

Dzielenie według separatora

Przekaż separator do getline używanego na stringstreamie, aby dzielić tekst według przecinków, średników lub dowolnego znaku.

std::string csv = "apple,banana,cherry";
std::stringstream ss(csv);
std::string fruit;
while (std::getline(ss, fruit, ',')) {
    std::cout << fruit << "\n";
}

istringstream i ostringstream

Istnieją trzy odmiany:

  • std::istringstream — tylko odczyt
  • std::ostringstream — tylko zapis
  • std::stringstream — odczyt i zapis

Dla większej czytelności używaj najwęższego interfejsu, który jest potrzebny.

Sprawdzanie błędów parsowania

Jeśli pobieranie się nie powiedzie, na przykład z powodu nieprawidłowego typu, strumień ustawi bit błędu. Po pobraniu danych sprawdź !ss lub ss.fail().

std::stringstream ss("not_a_number");
int x;
if (!(ss >> x)) {
    std::cout << "Parse failed";
}

Resetowanie stringstreama

Aby ponownie użyć stringstreama, wyczyść jego stan i zawartość.

std::stringstream ss;
ss << "first";
ss.str("");        // clear contents
ss.clear();        // clear flags
ss << "second";

Liczba na ciąg znaków

W przypadku prostych konwersji std::to_string jest krótsze niż użycie stringstreama.

std::string s = std::to_string(42);   // "42"
std::string p = std::to_string(3.14); // "3.140000"

Ciąg znaków na liczbę bez strumieni

std::stoi, std::stod i std::stoll parsują liczby z ciągów znaków i zgłaszają wyjątek dla nieprawidłowych danych.

int n = std::stoi("42");
double d = std::stod("3.14");
// std::stoi("xyz") throws std::invalid_argument

C++17 std::from_chars

Aby uzyskać maksymalną szybkość, std::from_chars z nagłówka <charconv> parsuje dane bez wyjątków i alokacji pamięci. Idealnie nadaje się do często wykonywanych fragmentów kodu.

Szybkie sprawdzenie

Jaki nagłówek należy dołączyć, aby używać std::stringstream?

Podsumowanie

std::stringstream zamienia ciągi znaków w strumienie, ułatwiając parsowanie i formatowanie. Połącz go z std::getline, aby dzielić tekst według separatorów. W prostych przypadkach preferuj std::to_string i std::stoi.

Często zadawane pytania

Czy lekcja „Strumień napisów stringstream do parsowania” jest bezpłatna?

Tak — pełny tekst „Strumień napisów stringstream do parsowania” 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 „Strumień napisów stringstream do parsowania”?

Proszę używać std::stringstream do tokenizacji tekstu i parsowania go do wartości określonych typów. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Strumień napisów stringstream do parsowania”?

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