Ce face std::ostringstream
std::ostringstream adună tot ce scrii în el cu << într-un șir din memorie. La final, str() îți dă textul complet. Toți manipulatorii de la std::cout funcționează: std::setw, std::fixed, std::setprecision, std::hex.
Înainte de C++20 era modul obișnuit de a construi texte cu numere formatate. Astăzi, std::format face același lucru mai scurt, dar ostringstream rămâne util pentru tipurile care au doar operator<<.
Exemple
Exemplul 1: Preț formatat ca text
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
int main() {
double pret = 49.9;
std::ostringstream out;
out << std::fixed << std::setprecision(2) << pret << " lei";
std::string eticheta = out.str();
std::cout << "Eticheta: " << eticheta << " (" << eticheta.size() << " caractere)\n";
}
Rezultat
Eticheta: 49.90 lei (9 caractere)
Exemplul 2: Lipirea elementelor unei liste
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> orase = {"Iași", "Cluj", "Brașov"};
std::ostringstream out;
for (std::size_t i = 0; i < orase.size(); ++i) {
if (i > 0) out << ", ";
out << orase[i];
}
std::cout << "Orașe: " << out.str() << '\n';
}
Rezultat
Orașe: Iași, Cluj, Brașov
Greșeli frecvente
- Apelezi
out.str()de mai multe ori într-o buclă mare: de fiecare dată se face o copie a întregului text.
Comenzi înrudite
std::stringstream: Flux care scrie și citește într-un șir din memorie; str() îi dă sau îi schimbă textul.std::istringstream: Flux de citire dintr-un șir: desparte un text în cuvinte, numere sau câmpuri.std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).std::to_string: Transformă un număr în std::string, de exemplu 42 în „42”.