it-swarm-tr.com

C ++ 'da bir dizgeye int ekler misiniz?

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

Player 4 yazdırmasını istiyorum.

Yukarıdakiler açıkça yanlış ama burada ne yapmaya çalıştığımı gösteriyor. Bunu yapmanın kolay bir yolu var mı, yoksa yeni içerikler eklemeye mi başlamalıyım?

145
Wawa

C++ 11 ile yazabilirsiniz:

#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

Eğer sütür kullanıyorsanız, tamsayıyı olduğu gibi doğrudan ona yazabilirsiniz.

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

Her türlü nesneyi dizgiye dönüştürmenin C++ yolu string streams 'dir. Eğer kullanışlı bir tane yoksa, sadece bir tane oluşturun.

_#include <sstream>

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

Alternatif olarak, tam sayıyı dönüştürebilir ve dizeye ekleyebilirsiniz.

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

Son olarak, Boost kütüphaneleri, yerleşik yazı tipi yayınları gibi bir sözdizimi ile stringstream dönüşümünü tamamlayan boost::lexical_cast sağlar.

_#include <boost/lexical_cast.hpp>

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

Bu aynı zamanda, diğer bir deyişle, dizeleri ayrıştırmak için çalışır.

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

(İstediğiniz gibi cevabımı oy verin; C++ I/O operatörlerinden hala nefret ediyorum.)

:-P

114
Eric

Bunlar genel dizgiler için işe yarar (dosya/konsola çıktı vermek istemezseniz daha sonra kullanmak üzere saklayın).

boost.lexical_cast

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

Dize akışları

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

Kayıt için, gerçekte çıkışından önce dizeyi oluşturmak istiyorsanız, std::stringstream komutunu da kullanabilirsiniz.

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

Örneğiniz, bir tamsayı izleyen bir dizgeyi göstermek istediğinizi, bu durumda:

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

iyi çalışırdı.

Ancak, ip dizelerini saklayacak ya da etrafından geçirecekseniz ve bunu sık sık yapıyorsanız, ekleme operatörünü aşırı yüklemekten faydalanabilirsiniz. Bunu aşağıda gösteriyorum:

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

Aslında, bu yaklaşımı daha güçlü hale getirmek için şablonları kullanabilirsiniz:

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

Artık, b nesnesi tanımlı bir akış çıktısına sahip olduğu sürece, onu dizginize ekleyebilir (ya da en azından bir kopyasını).

4
Richard

Başka bir olasılık ise 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

Burada küçük bir çalışma dönüşümü/ekleme örneği, daha önce ihtiyacım olan bazı kodlar var.

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

çıktı:

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

Son iki satırda değiştirilen dizgiyi gerçekte yazdırılmadan önce kaydettiğinizi ve gerekirse daha sonra kullanabileceğinizi unutmayın.

2
Robert Parcus

Kayıt için Qt'un QString sınıfını da kullanabilirsiniz:

#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

Buradaki bir yöntem, sorununuzda gerekli olması halinde, çıktıyı doğrudan yazdırmaktır.

cout << text << i;

Aksi takdirde, en güvenli yöntemlerden biri kullanmaktır.

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

Ve sonra onu "metin" dizginize kopyalayın.

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

Böylece istediğiniz çıktı dizgisine sahipsiniz.

sprintf hakkında daha fazla bilgi için, izleyin: http://www.cplusplus.com/reference/cstdio/sprintf

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

Ostream için << operatörü ostream'e bir referans döndürür, böylece << işlemlerini zincirlemeye devam edebilirsiniz. Yani, yukarıdaki temel olarak aynıdır:

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

Ayrıca oyuncunun numarasını std::string::Push_back ile birleştirmeyi de deneyin:

Kodunuzla ilgili örnek:

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

Konsolda göreceksiniz:

4. Oyuncu

Bunu çözmenin en kolay yolu şudur:
Bir single string ve string array olarak çalışacaktır. Bir dizge dizisini düşünüyorum, karmaşık olduğu için (biraz aynı dizge ile takip edilecektir). Bir dizi ad oluşturuyorum ve append bazı tamsayılar ve onunla bazı eklemelerin ne kadar kolay olduğunu göstermek için bununla birlikte int ve chars dize, yardımcı olur umarım. uzunluk sadece dizinin boyutunu ölçmektir. Programlamaya aşina iseniz size_t işaretsiz bir 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