Murilo :P

C++, Computação, Programação, Web e afins :)

Como converter um número para uma std::string e vice-versa

com 8 comentários

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.

Baseado em http://www.parashift.com/c++-faq-lite/index.html

Escrito por Murilo Adriano

quarta-feira 1 \01\UTC outubro \01\UTC 2008 às 00:41

Publicado em C/C++, Programação

Etiquetado com , , , , ,

8 Respostas

Assinar os comentários com RSS.

  1. Massa o esquinha ai, bem util as vezes
    falowwww cara…

    leonardonunes

    quarta-feira 1 \01\UTC outubro \01\UTC 2008 em 07:37

  2. Post manero kra!!!! Coisa bastante últil mesmo isso ae!

    flws.

    John

    quarta-feira 1 \01\UTC outubro \01\UTC 2008 em 13:47

  3. Cara..MUITISSIMO OBRIGADO..essa sua dica me salvou…valeu!

    Frederico Spies

    sexta-feira 5 \05\UTC dezembro \05\UTC 2008 em 16:46

  4. 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

  5. @Asafe
    acho que apenas controle.. |:

    Eventide

    domingo 24 \24\UTC maio \24\UTC 2009 em 09:20

  6. 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


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.