Eu pensei que isso seria realmente simples, mas está apresentando algumas dificuldades. Se eu tiver
std::string name = "John";
int age = 21;
Como faço para combiná-los para obter uma única string "John21"
?
c++
int
concatenation
stdstring
Obediah Stane
fonte
fonte
Boost::lexical_cast
,std::stringstream
,std::strstream
(que está obsoleta), esprintf
vs.snprintf
.Respostas:
Em ordem alfabética:
#include <string>
)#include <sstream>
(do C ++ padrão)fonte
String(number)
.No C ++ 11, você pode usar
std::to_string
, por exemplo:fonte
Se você possui o Boost, pode converter o número inteiro em uma string usando
boost::lexical_cast<std::string>(age)
.Outra maneira é usar strings:
Uma terceira abordagem seria usar
sprintf
ou asnprintf
partir da biblioteca C.Outros pôsteres sugeriram o uso
itoa
. Essa NÃO é uma função padrão; portanto, seu código não será portátil se você o usar. Existem compiladores que não suportam isso.fonte
sprintf
apenas respostasnprintf
.fonte
Roubado descaradamente de http://www.research.att.com/~bs/bs_faq2.html .
fonte
s
é uma pilha variáveis, a memória des
será liberada após a chamadaitos
.s
deve alocar da pilha, efree
depois de usar, certo?Esta é a maneira mais fácil:
fonte
Se você possui C ++ 11, pode usar
std::to_string
.Exemplo:
Resultado:
fonte
name += std::to_string(static_cast<long long>(age));
no VC ++ 2010, como você pode ver aqui #name += std::to_string(age + 0LL);
vez disso?Parece-me que a resposta mais simples é usar a
sprintf
função:fonte
fonte
Então seu uso seria algo parecido com isto
Pesquisou no Google [e testou: p]
fonte
Esse problema pode ser feito de várias maneiras. Vou mostrar de duas maneiras:
Converta o número em string usando
to_string(i)
.Usando fluxos de string.
Código:
fonte
Se você deseja usar
+
para concatenação de qualquer coisa que possua um operador de saída, é possível fornecer uma versão do modelo deoperator+
:Em seguida, você pode escrever suas concatenações de maneira direta:
Resultado:
Essa não é a maneira mais eficiente, mas você não precisa da maneira mais eficiente, a menos que esteja fazendo muita concatenação dentro de um loop.
fonte
std::string
, portanto, não seria candidato em expressões em que uma string não é convertível no tipo necessário. Por exemplo, issooperator+
não é elegível para uso+
emint x = 5 + 7;
. Considerando tudo, eu não definiria um operador como esse sem uma razão muito convincente, mas meu objetivo era oferecer uma resposta diferente dos outros.Se você estiver usando o MFC, poderá usar um CString
O C ++ gerenciado também possui um formatador de string .
fonte
O std :: ostringstream é um bom método, mas às vezes esse truque adicional pode ser útil para transformar a formatação em uma linha:
Agora você pode formatar strings como este:
fonte
Como uma pergunta relacionada ao Qt foi encerrada em favor deste, veja como fazê-lo usando o Qt:
A variável string agora tem o valor de someIntVariable no lugar de% 1 e o valor de someOtherIntVariable no final.
fonte
Há mais opções possíveis para concatenar número inteiro (ou outro objeto numérico) com a sequência. É Boost.Format
e Karma de Boost.Spirit (v2)
O Boost.Spirit Karma afirma ser uma das opções mais rápidas para conversão de número inteiro em string .
fonte
Resposta comum: itoa ()
Isto é mau.
itoa
não é padrão, como apontado aqui .fonte
Você pode concatenar int para string usando o truque simples abaixo, mas observe que isso só funciona quando o número inteiro é de um dígito. Caso contrário, adicione dígito inteiro por dígito a essa sequência.
fonte
Aqui está uma implementação de como anexar um int a uma string usando as facetas de análise e formatação da biblioteca IOStreams.
fonte
fonte
Há uma função que escrevi, que pega o número int como parâmetro e o converte em uma string literal. Esta função depende de outra função que converte um único dígito em seu equivalente de caractere:
fonte
Com a biblioteca {fmt} :
Um subconjunto da biblioteca é proposto para padronização como Formatação de texto P0645 e, se aceito, o acima será:
Isenção de responsabilidade : sou o autor da biblioteca {fmt}.
fonte
Como um forro:
name += std::to_string(age);
fonte