Murilo :P

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

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

with 9 comments

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

Advertisements

Written by Murilo Adriano

1 de October de 2008 at 00:41

Posted in C/C++, Programação

Tagged with , , , , ,

9 Responses

Subscribe to comments with RSS.

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

    leonardonunes

    1 de October de 2008 at 07:37

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

    flws.

    John

    1 de October de 2008 at 13:47

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

    Frederico Spies

    5 de December de 2008 at 16:46

  4. Por que você usa std::cout,std::endl ao invés de declarar using namespace std?
    Alguma vantagem nisso?

    Asafe

    30 de December de 2008 at 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

      24 de May de 2009 at 18:06

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

    Eventide

    24 de May de 2009 at 09:20

  6. Por este método dá para converter uma System::String em uma std::string?

    Marcos Faino

    5 de September de 2011 at 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

      5 de September de 2011 at 15:10

  7. Parabéns pelo post, foi de grande ajuda!

    Bruno Monteiro

    14 de May de 2012 at 20:36


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: