PUCRS
Faculdade de Informática
Programação C/C++
Prof. Márcio Sarroglia Pinho


Conversão entre Strings e Números em C++

Conversão de Números para Strings

A conversão de um número para uma string em C++ é feita através de  string streams.

As string streams são derivações das streams de arquivos e tem seu funcionamento muito semelhante a estes. Para criar uma string stream deve-se declarar um objeto da classe
stringstream, da seguinte forma:

#include <sstream>
using std::stringstream;
....
......
stringstream buffer;

A partir desta declaração pode-se inserir números (inteiros ou reais) na variável que representa o fluxo, utilizando para isto, o mesmo operador de inserção "<<" utilizado com o objeto cout.

buffer << 12.4;

A partir deste comando o número é convertido para uma string e armazenado dentro da stream.
Para obter o conteúdo do que está armazenado na stream, usa-se o método
stringstream::str(), conforme o exemplo abaixo.

string s1;
s1 = buffer.str();

cout << "Saida:" << s1 << endl;

A cada comando de inserção, o conteúdo da stream é acrescido do dado que está sendo inserido, não havendo a perda das informações já inseridas. O trecho abaixo, por exemplo, imprime, lado a lado, os valores inseridos na stream.


#include <sstream>

using std::string;
using std::stringstream;

......
.......
...

stringstream buffer;
string s1;

f = 123.45;

buffer << f ; // insere o primeiro dado

buffer << -987;  // insere o segundo dado

s1 = buffer.str();

cout << "Saida:" << s1 << endl;

Resultado da execução:
Saida:123.45-987



Para limpar uma string stream deve-se usar o método stringstream::str(), que serve também para subtituir o valor atual armazenado na stream por um novo valor, passado por parâmetro para o método. Observe o exemplo abaixo.


#include <sstream>

using std::string;
using std::stringstream;

......
.......
...

stringstream buffer;
string s1;
buffer << 124; // coloca um dado no fluxo
buffer.str(""); // limpa o fluxo
buffer << 546;
// coloca um novo dado no fluxo

s1 = buffer.str();

cout << "Saida:" << s1 << endl;

Resultado da execução:
Saida:546

Além de números, também se pode inserir strings ou caracteres nas string streams. Neste caso, este dados são apenas copiados para dentro da stream, sem que haja qualquer conversão.

Para formatar os números inseridos no fluxo pode-se utilizar os mesmos comandos utilizados com o cout.  Observe o exemplo abaixo.

#include <iomanip> // necessário para a formatação dos números
#include <sstream>

using std::string;
using std::stringstream;

......
.......
...
string s1;
stringstream buffer;

f = 12;
buffer << f ;
buffer << " dividido por " << setw(3) << 7 << " vale " << fixed << setprecision(3) << f/7;

s1 = buffer.str();

cout << "Saida:" << s1 << endl;

Resultado da execução:
Saida:12 dividido por   7 vale 1.714



Conversão de Strings para Números
      
        Para converter o conteúdo de uma string para um ou mais números, usa-se a string stream com o operador de extração ">>", conforme o exemplo a seguir.


buffer << "124  2.45";
int i;
double b;

buffer >> i >> b;
cout << "I: " << i << endl;
cout << "B: " << b << endl;

Resultado da execução:
I: 124
B: 2.45



FIM.