Como converter um número para uma std::string e vice-versa
Que a biblioteca <iostream> oferece inúmeras facilidades para manipular I/O nós já sabemos mas, como converter um valor para uma std::string?
A bliblioteca <iostream> nos permite converter facilmente qualquer coisa para uma std::string usando a seguinte sintaxe (o exemplo a seguir converte um double, mas você pode substituir por qualquer coisa imprimível usando o operador <<):
#include <iostream>
#include <sstream>
#include <string>
std::string stringalizar(double x)
{
std::ostringstream oss;
oss << x;
return oss.str();
}
int main()
{
std::string str;
double dbl = -2.00655;
str = stringalizar(dbl);
std::cout << str << std::endl;
}
↓
O tipo std::ostringstream oferece facilidades de formatação assim como aquelas do std::cout. Nós podemos usar manipuladores e flags de formatação para controlar o formato do resultado, assim como podemos fazer com o std::cout.
Nesse exemplo, inserí x em oss pelo operador sobrecarregado de inserção <<. Isso invoca as facilidades do <iostream> para converter x em uma std::string.
A expressão oss.str() retorna uma std::string que contem o que foi inserido na stream oss, nesse caso, uma string com o valor de x.
Agora contrariando, ou fazendo o contrário
#include <iostream>
#include <sstream>
#include <string>
double converterParaDouble(std::string str)
{
std::istringstream iss(str);
double retorno;
iss >> retorno;
return retorno;
}
int main()
{
std::string str("261.15");
double dbl = converterParaDouble(str);
std::cout << dbl << std::endl;
}
↓
O tipo std::istringstream oferece facilidades de formatação assim como aquelas que std::cin oferece. Podemos usar modificadores e flags de formatação assim como em std::cin.
Nesse exemplo, nós inicializamos a std::string str com “261.15″ e passamos para nossa função de conversão. Na função nós inicializamos a std::istringstream iss passando a std::string str, então nós extraímos iss para retorno com o operador de extração >>. Isso nos provê as facilidades da <iostream> para converter a nossa string apropriadamente baseando-se no tipo da variável retorno.

Massa o esquinha ai, bem util as vezes
falowwww cara…
leonardonunes
quarta-feira 1 \01\UTC outubro \01\UTC 2008 em 07:37
Post manero kra!!!! Coisa bastante últil mesmo isso ae!
flws.
John
quarta-feira 1 \01\UTC outubro \01\UTC 2008 em 13:47
Cara..MUITISSIMO OBRIGADO..essa sua dica me salvou…valeu!
Frederico Spies
sexta-feira 5 \05\UTC dezembro \05\UTC 2008 em 16:46
Por que você usa std::cout,std::endl ao invés de declarar using namespace std?
Alguma vantagem nisso?
Asafe
terça-feira 30 \30\UTC dezembro \30\UTC 2008 em 18:07
Desculpe-me por não ter respondido antes.
A vantagem de se usar desse jeito é que você não inclui todo o namespace no seu programa.
Ou seja, você não vai incluir nomes que não são úteis em sua aplicação.
No nosso caso apenas precisamos usar std::cout e std::endl. Não é preciso incluir todo o namespace std para isso.
No namespace pode haver nomes que você queira definir posteriormente.
Por exemplo:
using namespace std;int main()
{
int cin = 2; //problema, cin já foi definido no namespace std.
}
using std::cout;int main()
{
int cin = 2; //sem problemas!
cout << cin;
}
Qualquer dúvida, estamos aí!
Murilo Adriano
domingo 24 \24\UTC maio \24\UTC 2009 em 18:06
@Asafe
acho que apenas controle.. |:
Eventide
domingo 24 \24\UTC maio \24\UTC 2009 em 09:20
Por este método dá para converter uma System::String em uma std::string?
Marcos Faino
segunda-feira 5 \05\UTC setembro \05\UTC 2011 em 14:40
Acredito que você esteja falando do System::String do .NET Framework.
Nesse caso não há como fazer a conversão desta forma.
De qualquer maneira, achei esse link no MSDN que pode te ajudar.
Murilo Adriano
segunda-feira 5 \05\UTC setembro \05\UTC 2011 em 15:10