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_stringcomostd::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_stringcomostd::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_casttraz, 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_stringC ++ 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_stringsobrecargas (observe que o padrão é base-10).
ostreamfunciona, 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 .
sprintftambé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 ostringstreamou 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 ostringstreamem um genérico ostreamde 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_castretorna o tipo de volta para ostringstreamque 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 ostreamvisí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;
}