Qual é a maneira mais curta, de preferência com capacidade de linha, para converter um int em uma string? Respostas usando stl e boost serão bem-vindas.
to_string
comostd::string s = std::to_string(42)
Qual é a maneira mais curta, de preferência com capacidade de linha, para converter um int em uma string? Respostas usando stl e boost serão bem-vindas.
to_string
comostd::string s = std::to_string(42)
Respostas:
Você pode usar std :: to_string no C ++ 11
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
de boost/lexical_cast.hpp
Funciona para tudo com o suporte std :: ostream, mas não é tão rápido quanto, por exemplo, itoa
Parece até mais rápido que o stringstream ou scanf:
lexical_cast
traz, mas sinto que o Boost é um exagero para esse tipo de tarefa ...
Bem, a maneira bem conhecida de fazer isso é usar o operador de fluxo:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
Claro que você pode generalizá-lo para qualquer tipo usando uma função de modelo ^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>
.
std::
;) #
Se você não pode usar o std::to_string
C ++ 11, você pode escrevê-lo conforme definido em cppreference.com:
std::string to_string( int value )
Converte um número inteiro decimal assinado em uma sequência com o mesmo conteúdo que ostd::sprintf(buf, "%d", value)
que produziria para um buf suficientemente grande.
Implementação
#include <cstdio>
#include <string>
#include <cassert>
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
assert( length >= 0 );
char* buf = new char[length + 1];
snprintf( buf, length + 1, "%d", x );
std::string str( buf );
delete[] buf;
return str;
}
Você pode fazer mais com isso. Apenas use "%g"
para converter float ou double em string, use "%x"
para converter representação int em hexadecimal e assim por diante.
Função não padrão, mas implementada nos compiladores mais comuns:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
Atualizar
O C ++ 11 introduziu várias std::to_string
sobrecargas (observe que o padrão é base-10).
ostream
funciona, até que você precise salvar a sequência numérica como algo diferente de um formato binário, octal ou hexadecimal (por exemplo, base-32).
itoa()
ou stricmp()
são dadas como resposta a qualquer coisa .
sprintf
também posso cumprir o objetivo do OP (embora ainda sofra com a falta de flexibilidade se for necessário algo diferente dos números de base comuns).
A macro a seguir não é tão compacta quanto um uso único ostringstream
ou boost::lexical_cast
.
Mas se você precisar de conversão para string repetidamente em seu código, essa macro será mais elegante em uso do que manipular diretamente strings de seqüência de caracteres ou conversão explícita sempre.
Também é muito versátil, pois converte tudo o que é suportado operator<<()
, mesmo em combinação.
Definição:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
Explicação:
A std::dec
é uma maneira de lado sem efeito para fazer o anônimo ostringstream
em um genérico ostream
de modo operator<<()
lookup função funciona corretamente para todos os tipos. (Caso contrário, você terá problemas se o primeiro argumento for do tipo ponteiro.)
O dynamic_cast
retorna o tipo de volta para ostringstream
que você possa chamar str()
nele.
Usar:
#include <string>
int main()
{
int i = 42;
std::string s1 = SSTR( i );
int x = 23;
std::string s2 = SSTR( "i: " << i << ", x: " << x );
return 0;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
faria? (Não testei, mas eu me pergunto o que iria dar errado e por quê?
int
(meu primeiro exemplo). Mas sem o ostream
visível para o compilador no main
(como ele está escondido dentro da função de modelo), ele vai tentar olhar para cima operator<<()
para const char []
no meu segundo exemplo - que irá coaxar. Eu sei que o OP pediu apenas uma int
, mas essa macro mais genérica é tão útil (e na verdade bastante difundida) que pensei em incluí-la aqui.
Você pode incluir a implementação do itoa em seu projeto.
Aqui está o itoa modificado para trabalhar com std :: string: http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
Aqui está outra maneira fácil de converter int para string
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
você pode visitar este link para obter mais métodos https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
Suponha que eu tenha integer = 0123456789101112
. Agora, esse número inteiro pode ser convertido em uma string pelostringstream
classe.
Aqui está o código em C ++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string s;
stringstream st;
for(i=0;i<=12;i++)
{
st<<i;
}
s=st.str();
cout<<s<<endl;
return 0;
}