it-swarm-pt.tech

Como você adiciona um int a uma string em C ++?

int i = 4;
string text = "Player ";
cout << (text + i);

Eu gostaria de imprimir Player 4.

O acima exposto está obviamente errado, mas mostra o que estou tentando fazer aqui. Existe uma maneira fácil de fazer isso ou eu tenho que começar a adicionar novos includes?

142
Wawa

Com o C++ 11, você pode escrever:

#include <string>     // to use std::string, std::to_string() and "+" operator acting on strings 

int i = 4;
std::string text = "Player ";
text += std::to_string(i);
223
headmyshoulder

Bem, se você usar cout você pode simplesmente escrever o inteiro diretamente para ele, como em

std::cout << text << i;

A maneira C++ de converter todos os tipos de objetos em strings é através de strings de string . Se você não tiver um à mão, basta criar um.

#include <sstream>

std::ostringstream oss;
oss << text << i;
std::cout << oss.str();

Alternativamente, você pode apenas converter o inteiro e anexá-lo à string.

oss << i;
text += oss.str();

Por fim, as bibliotecas Boost fornecem boost::lexical_cast , que envolve a conversão stringstream com uma sintaxe como o tipo interno de conversão.

#include <boost/lexical_cast.hpp>

text += boost::lexical_cast<std::string>(i);

Isso também funciona ao contrário, ou seja, para analisar cadeias de caracteres.

189
Sebastian Redl
printf("Player %d", i);

(Voto negativo minha resposta tudo que você gosta; eu ainda odeio os operadores I/O C++.)

:-P

111
Eric

Estes trabalham para seqüências gerais (no caso de você não deseja saída para arquivo/console, mas armazenar para uso posterior ou algo assim).

boost.lexical_cast

MyStr += boost::lexical_cast<std::string>(MyInt);

Streams de string

//sstream.h
std::stringstream Stream;
Stream.str(MyStr);
Stream << MyInt;
MyStr = Stream.str();

// If you're using a stream (for example, cout), rather than std::string
someStream << MyInt;
19
Fire Lancer

Para o registro, você também pode usar um std::stringstream se você quiser criar a string antes de realmente sair.

9
Jason Baker
cout << text << " " << i << endl;
6
jjnguy

Seu exemplo parece indicar que você gostaria de exibir uma string seguida por um inteiro, caso em que:

string text = "Player: ";
int i = 4;
cout << text << i << endl;

funcionaria bem.

Mas, se você for armazenar os locais das cadeias de caracteres ou passá-los, e fazer isso com frequência, poderá se beneficiar da sobrecarga do operador de adição. Eu demonstro isso abaixo:

#include <sstream>
#include <iostream>
using namespace std;

std::string operator+(std::string const &a, int b) {
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

int main() {
  int i = 4;
  string text = "Player: ";
  cout << (text + i) << endl;
}

Na verdade, você pode usar modelos para tornar essa abordagem mais poderosa:

template <class T>
std::string operator+(std::string const &a, const T &b){
  std::ostringstream oss;
  oss << a << b;
  return oss.str();
}

Agora, contanto que o objeto b tenha uma saída de fluxo definida, você pode anexá-lo à sua string (ou, pelo menos, uma cópia dela).

4
Richard

Outra possibilidade é Boost.Format :

#include <boost/format.hpp>
#include <iostream>
#include <string>

int main() {
  int i = 4;
  std::string text = "Player";
  std::cout << boost::format("%1% %2%\n") % text % i;
}
3
Daniel James

Aqui está um pequeno exemplo de conversão/anexação, com algum código que eu precisava antes.

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main(){
string str;
int i = 321;
std::stringstream ss;
ss << 123;
str = "/dev/video";
cout << str << endl;
cout << str << 456 << endl;
cout << str << i << endl;
str += ss.str();
cout << str << endl;
}

a saída será:

/dev/video
/dev/video456
/dev/video321
/dev/video123

Note que nas duas últimas linhas você salva a string modificada antes de ser impressa, e você pode usá-la depois, se necessário.

2
Robert Parcus

Para o registro, você também pode usar a classe QString do Qt:

#include <QtCore/QString>

int i = 4;
QString qs = QString("Player %1").arg(i);
std::cout << qs.toLocal8bit().constData();  // prints "Player 4"
2
Brian Lenoski
cout << "Player" << i ;
1
rupello
cout << text << i;
1
john

Um método aqui é imprimir diretamente a saída, se necessário, em seu problema.

cout << text << i;

Outro, um dos métodos mais seguros é usar

sprintf(count, "%d", i);

E copie-o para o seu texto "string".

for(k = 0; *(count + k); k++)
{ 
  text += count[k]; 
} 

Assim, você tem sua string de saída requerida

Para mais informações sobre sprintf, siga: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << text << i;

O operador << para ostream retorna uma referência ao ostream, então você pode continuar encadeando as operações <<. Ou seja, o acima é basicamente o mesmo que:

cout << text;
cout << i;
0
introp
cout << text << " " << i << endl;
0
GEOCHET

Você também tenta concatenar o número do jogador com std::string::Push_back:

Exemplo com seu código:

int i = 4;
string text = "Player ";
text.Push_back(i + '0');
cout << text;

Você verá no console:

Jogador 4

0

A maneira mais fácil que eu poderia descobrir isso é o seguinte ..
Funcionará como string única e string array. Eu estou considerando uma matriz de string, como é complicado (pouco mesmo será seguido com string). Eu crio uma matriz de nomes e acrescento alguns inteiros e char com ele para mostrar como é fácil acrescentar alguns int e chars para string, espero que ajude. comprimento é apenas para medir o tamanho da matriz. Se você estiver familiarizado com a programação, então size_t é um unsigned int

#include<iostream>
    #include<string>
    using namespace std;
    int main() {

        string names[] = { "amz","Waq","Mon","Sam","Has","Shak","GBy" }; //simple array
        int length = sizeof(names) / sizeof(names[0]); //give you size of array
        int id;
        string append[7];    //as length is 7 just for sake of storing and printing output 
        for (size_t i = 0; i < length; i++) {
            id = Rand() % 20000 + 2;
            append[i] = names[i] + to_string(id);
        }
        for (size_t i = 0; i < length; i++) {
            cout << append[i] << endl;
        }


}
0
Code Black