Ce face std::istringstream
std::istringstream primește un text și îl oferă ca intrare, la fel ca std::cin. Cu >> îl desparți în cuvinte (după spații) și transformi automat bucățile în numere.
Este metoda clasică pentru prelucrarea unui rând citit cu getline: întâi citești tot rândul, apoi îl desparți cu un istringstream. Cu std::getline(in, camp, ',') desparți după alt caracter.
Exemple
Exemplul 1: Împărțirea unei propoziții în cuvinte
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::istringstream in("Ana are\tmere și pere");
std::vector<std::string> cuvinte;
std::string c;
while (in >> c) {
cuvinte.push_back(c);
}
std::cout << cuvinte.size() << " cuvinte:\n";
for (const auto& cuv : cuvinte) {
std::cout << "[" << cuv << "]\n";
}
}
Rezultat
5 cuvinte:
[Ana]
[are]
[mere]
[și]
[pere]
Exemplul 2: Un rând CSV transformat în valori
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string rand = "Laptop,3,2499.90";
std::istringstream in(rand);
std::string produs, bucati, pret;
std::getline(in, produs, ',');
std::getline(in, bucati, ',');
std::getline(in, pret, ',');
double total = std::stoi(bucati) * std::stod(pret);
std::cout << produs << ": " << total << " lei\n";
}
Rezultat
Laptop: 7499.7 lei
Greșeli frecvente
- Citești în
intun câmp care conține și text (12kg): se citește12, iarkgrămâne și strică citirea următoare.
Comenzi înrudite
std::stringstream: Flux care scrie și citește într-un șir din memorie; str() îi dă sau îi schimbă textul.std::ostringstream: Flux de scriere într-un șir: construiește text cu << și manipulatori, apoi îl iei cu str().std::getline: Citește un rând întreg, cu spații cu tot, într-un std::string.std::stoi: Transformă un text în număr întreg (int, long, long long, unsigned long), cu excepții la erori.