C++ oferece diversos recursos para acessar arquivos, ou mais genericamente streams. O nome stream representa um fluxo de entrada ou de saída, e pode ser entendido de diversas formas. Por exemplo, cout é um fluxo de saída e cin é um fluxo de entrada, ambos associados com o terminal. Da mesma forma, pode-se usar fluxos de saida para strings, por exemplo, que permitem compor strings como se estivéssemos escrevendo na tela.
String stream é um recurso que permite escrevermos em uma string como se estivéssemos realizando saída na tela (ex: via cout). Dessa forma, é possível utilizar todas as funcionalidades da iostream (formatos, alinhamento, precisão numérica, tamanho de campo, etc) em uma string.
É útil, por exemplo, para retornarmos informações sobre um objeto sob forma de string, especialmente quando é preciso combinar dados numéricos com dados não-numéricos.
Para utilizar o recurso de string stream, é necessário primeiramente incluir o header sstream. A partir daí, deve-se declarar um objeto do tipo ostringstream (output string stream) e utilizá-lo como se fosse uma saída padrão, ou seja, da mesma forma que cout:
Finalmente, para se obter a string armazenada no objeto ostringstream usa-se o método str:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <sstream>
using namespace std;
string converte(float valor)
{
ostringstream aux; // Declara o string stream de saída chamado aux
aux << "Exemplo de saída em string "; // Escreve em aux
aux << fixed << setprecision(2) << sqrt(valor); // idem
return aux.str(); // Retorna a string resultante a partir do stream aux
}
int main()
{
float v;
cout << "Digite o valor: ";
cin >> v;
cout << converte(v);
}
Note que se o objetivo for apenas concatenar (agrupar) duas ou mais strings, não é necessário usar string stream: basta empregar o operador de concatenação (+).
É muito comum a criação de um método denominado toString, que tem o papel de retornar uma representação do objeto armazendo como uma string. Por exemplo:
#include <iostream>
#include <sstream>
#include <string>
class Pessoa
{
private:
string nome;
string CPF;
int idade;
public:
Pessoa(string n, string cpf, int i) {
...
}
...
string toString();
...
};
...
string Pessoa::toString() {
// Cria um fluxo de saída em uma string
ostringstream aux;
// "Escreve" os dados no fluxo
aux << nome << " - " << CPF << " - " << idade;
// Retorna string contida no fluxo
return aux.str();
}