it-swarm-id.com

Bagaimana Anda menambahkan int ke string di C ++?

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

Saya ingin mencetak Player 4.

Di atas jelas salah tetapi ini menunjukkan apa yang saya coba lakukan di sini. Apakah ada cara mudah untuk melakukan ini atau saya harus mulai menambahkan menyertakan baru?

145
Wawa

Dengan C++ 11, Anda dapat menulis:

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

Nah, jika Anda menggunakan cout, Anda bisa langsung menulis bilangan bulat, seperti pada

_std::cout << text << i;
_

Cara C++ mengubah semua jenis objek menjadi string adalah melalui string stream . Jika Anda tidak memilikinya, buat saja.

_#include <sstream>

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

Atau, Anda bisa mengonversi bilangan bulat dan menambahkannya ke string.

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

Akhirnya, pustaka Boost menyediakan boost::lexical_cast , yang membungkus konversi stringstream dengan sintaksis seperti gips tipe bawaan.

_#include <boost/lexical_cast.hpp>

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

Ini juga berfungsi sebaliknya, yaitu untuk mengurai string.

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

(Turunkan jawaban saya sesuka Anda; Saya masih membenci operator C++ I/O.)

:-P

114
Eric

Ini berfungsi untuk string umum (jika Anda tidak ingin menampilkan ke file/konsol, tetapi simpan untuk digunakan nanti atau sesuatu).

boost.lexical_cast

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

String mengalir

//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

Sebagai catatan, Anda juga dapat menggunakan std::stringstream jika Anda ingin membuat string sebelum benar-benar di-output.

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

Contoh Anda tampaknya menunjukkan bahwa Anda ingin menampilkan string diikuti oleh integer, dalam hal ini:

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

akan bekerja dengan baik.

Tetapi, jika Anda akan menyimpan tempat string atau menyebarkannya, dan melakukan hal ini sering, Anda mungkin mendapat manfaat dari kelebihan operator tambahan. Saya menunjukkan ini di bawah ini:

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

Bahkan, Anda bisa menggunakan templat untuk membuat pendekatan ini lebih kuat:

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

Sekarang, selama objek b memiliki output stream yang ditentukan, Anda dapat menambahkannya ke string Anda (atau, setidaknya, salinannya).

4
Richard

Kemungkinan lain adalah 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

Di sini contoh konversi/penambahan kecil yang berfungsi, dengan beberapa kode yang saya butuhkan sebelumnya.

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

hasilnya adalah:

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

Perhatikan bahwa dalam dua baris terakhir Anda menyimpan string yang dimodifikasi sebelum benar-benar dicetak, dan Anda bisa menggunakannya nanti jika diperlukan.

2
Robert Parcus

Sebagai catatan, Anda juga dapat menggunakan kelas Qt QString:

#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 << text << i;
1
john

Salah satu metode di sini adalah langsung mencetak output jika diperlukan dalam masalah Anda.

cout << text << i;

Selain itu, salah satu metode teraman adalah menggunakan

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

Dan kemudian salin ke string "teks" Anda.

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

Dengan demikian, Anda memiliki string output yang diperlukan

Untuk info lebih lanjut tentang sprintf, ikuti: http://www.cplusplus.com/reference/cstdio/sprintf

1
Saurabh Mishra
cout << "Player" << i ;
0
rupello
cout << text << i;

Operator << untuk ostream mengembalikan referensi ke ostream, jadi Anda bisa terus merantai operasi <<. Artinya, di atas pada dasarnya sama dengan:

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

Anda juga mencoba menyatukan nomor pemain dengan std::string::Push_back:

Contoh dengan kode Anda:

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

Anda akan melihat di konsol:

Pemain 4

Cara termudah untuk mengetahui ini adalah sebagai berikut ..
Ini akan berfungsi sebagai string tunggal dan array string. Saya sedang mempertimbangkan array string, karena rumit (sedikit sama akan diikuti dengan string). Saya membuat array nama dan append beberapa integer dan char dengannya untuk menunjukkan betapa mudahnya menambahkan beberapa int dan chars ke string, semoga membantu. panjang hanya untuk mengukur ukuran array. Jika Anda terbiasa dengan pemrograman maka size_t adalah 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