C++ Academy · Oppitunti

Merkkijonovirta stringstream jäsentämiseen

Käyttäkää std::stringstreamia tekstin tokenisointiin ja jäsentämiseen tyypitetyiksi arvoiksi.

Oppitunti 3/413 vaihetta

Merkkijonovirta stringstream jäsentämiseen on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on stringstream?

std::stringstream käärii merkkijonon iostream-rajapinnan ympärille. Lukekaa ja kirjoittakaa siihen operaattoreilla >> ja << aivan kuin käyttäisitte virtoja cin tai cout.

#include <sstream>
std::stringstream ss;

Merkkijonojen rakentaminen stringstreamilla

Käyttäkää sitä monimutkaisten merkkijonojen rakentamiseen eri tyyppien arvoista. Kutsukaa funktiota .str() saadaksenne tuloksen.

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

Jäsentäminen stringstreamilla

Alustakaa virta merkkijonosta ja poimikaa arvot operaattorilla >>. Se jakaa syötteen osiin tyhjätilan perusteella.

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

Rivin lukeminen osiksi

Yhdistäkää getline ja stringstream, jotta voitte jakaa yhden rivin kerrallaan osiin.

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

Jakaminen erottimen kohdalta

Välittäkää stringstreamin getline-funktiolle erotin, jotta voitte jakaa tekstin pilkkujen, puolipisteiden tai minkä tahansa merkin kohdalta.

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

istringstream ja ostringstream

Vaihtoehtoja on kolme:

  • std::istringstream — vain lukemiseen
  • std::ostringstream — vain kirjoittamiseen
  • std::stringstream — molempiin

Käyttäkää selkeyden vuoksi mahdollisimman rajattua vaihtoehtoa.

Jäsennysvirheiden tarkistaminen

Jos arvon poimiminen epäonnistuu, esimerkiksi väärän tyypin vuoksi, virta asettaa fail-bitin. Tarkistakaa poiminnan jälkeen !ss tai ss.fail().

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

stringstreamin nollaaminen

Jos haluatte käyttää stringstreamia uudelleen, tyhjentäkää sekä sen tila että sisältö.

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

Luvusta merkkijonoksi

Yksinkertaisiin muunnoksiin std::to_string on lyhyempi vaihtoehto kuin stringstream.

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

Merkkijonosta luvuksi ilman virtoja

std::stoi, std::stod ja std::stoll jäsentävät lukuja merkkijonoista ja aiheuttavat poikkeuksen virheellisen syötteen yhteydessä.

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

C++17 std::from_chars

Parhaan suorituskyvyn saavuttamiseksi <charconv>-otsikkotiedoston std::from_chars jäsentää arvot ilman poikkeuksia tai varauksia. Se sopii erinomaisesti suorituskyvyn kannalta kriittisiin kohtiin.

Pikatarkistus

Mikä otsikkotiedosto on sisällytettävä, jotta voitte käyttää tyyppiä std::stringstream?

Kertaus

std::stringstream muuttaa merkkijonot virroiksi, mikä helpottaa jäsentämistä ja muotoilua. Yhdistäkää se funktioon std::getline, kun haluatte jakaa tekstin erottimien kohdalta. Yksinkertaisissa tapauksissa suosikaa funktioita std::to_string ja std::stoi.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Merkkijonovirta stringstream jäsentämiseen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Merkkijonovirta stringstream jäsentämiseen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Merkkijonovirta stringstream jäsentämiseen”?

Käyttäkää std::stringstreamia tekstin tokenisointiin ja jäsentämiseen tyypitetyiksi arvoiksi. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Merkkijonovirta stringstream jäsentämiseen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. std::string ja C-tyyliset merkkitaulukot
  2. Merkkijono-operaatiot: yhdistäminen, osat, haku ja korvaus
  3. Merkkijonovirta stringstream jäsentämiseen
  4. Merkkijonojen muunnokset: to_string ja stoi
← Takaisin: C++ Academy