it-swarm-es.tech

¿Cómo adjuntar un int a una cadena en C++?

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

Me gustaría imprimir Player 4.

Lo anterior obviamente es incorrecto, pero muestra lo que estoy tratando de hacer aquí. ¿Hay una manera fácil de hacer esto o tengo que empezar a agregar nuevos incluyen?

141
Wawa

Con C++ 11, puedes escribir:

#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);
220
headmyshoulder

Bueno, si usas cout solo puedes escribir el entero directamente en él, como en

std::cout << text << i;

La forma en C++ de convertir todo tipo de objetos en cadenas es a través de string streams . Si no tienes uno a mano, solo crea uno.

#include <sstream>

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

Alternativamente, puede simplemente convertir el número entero y agregarlo a la cadena.

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

Finalmente, las bibliotecas Boost proporcionan boost::lexical_cast , que envuelve la conversión de cadena de caracteres con una sintaxis como las conversiones de tipo integradas.

#include <boost/lexical_cast.hpp>

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

Esto también funciona al revés, es decir, para analizar cadenas.

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

(Anote mi respuesta como desee; todavía odio a los operadores de E/S de C++).

:-PAG

110
Eric

Estos funcionan para cadenas generales (en caso de que no desee enviar a archivo/consola, sino almacenar para su uso posterior o algo así).

boost.lexical_cast

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

Corrientes de cuerda

//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 el registro, también puede usar un std::stringstream si desea crear la cadena antes de que se genere.

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

Su ejemplo parece indicar que le gustaría mostrar una cadena seguida de un número entero, en cuyo caso:

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

funcionaría bien.

Pero, si va a almacenar los lugares de la cadena o pasarlo, y hacer esto con frecuencia, puede beneficiarse de la sobrecarga del operador de adición. Lo demuestro a continuación:

#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;
}

De hecho, puede usar plantillas para hacer este enfoque más poderoso:

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

Ahora, siempre que el objeto b tenga una salida de flujo definida, puede agregarla a su cadena (o, al menos, una copia de la misma).

4
Richard

Otra posibilidad es 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

Aquí hay un pequeño ejemplo de conversión/adición de trabajo, con algo de código que necesitaba 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;
}

la salida será:

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

Tenga en cuenta que en las dos últimas líneas guarda la cadena modificada antes de que se imprima, y ​​puede usarla más tarde si es necesario.

2
Robert Parcus

Para el registro, también podría usar la clase QString de 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

Un método aquí es imprimir directamente la salida si es necesario en su problema.

cout << text << i;

Si no, uno de los métodos más seguros es utilizar

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

Y luego copiarlo a su cadena de "texto".

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

Por lo tanto, tiene su cadena de salida requerida

Para obtener más información sobre sprintf, siga: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << text << i;

El operador << para ostream devuelve una referencia a ostream, por lo que puede seguir encadenando las operaciones <<. Es decir, lo anterior es básicamente lo mismo que:

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

También intentas concatenar el número del jugador con std::string::Push_back:

Ejemplo con su código:

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

Verás en la consola:

Jugador 4

La forma más fácil de resolver esto es la siguiente ...
Funcionará como cadena única y cadena de cadenas . Estoy considerando una matriz de cadenas, ya que es complicada (poco se seguirá con la cadena). Creo una serie de nombres y agregue algún número entero y carácter para mostrar lo fácil que es agregar algunos int y chars a cadena, espero que ayude. la longitud es sólo para medir el tamaño de la matriz. Si está familiarizado con la programación, entonces size_t es un 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