2011-08-10 25 views
8

iki Qstringleri bitiştirme: + Ben (yani, directory:/karim/pic5.jpg olmalıdır) dizeleri ve tamsayı bitiştirmek istiyorum demektir++ Qt kullanarak ben C böyle bir şey yapmak istiyorum bir tamsayı

int i = 5; 
QString directory = ":/karim/pic" + i + ".jpg"; 

. Bunu nasıl yapabilirim?

+11

C++ concatenate dize ve int http://stackoverflow.com/questions/191757/c-concatenate-string-and-int orada bunu yapmak için 8 yolları ile bir cevabı yoktur. – Vache

+0

Etiketler, "qt" için bir yanıt istediğini, "yinelenen" yanıtların bunu sağladığını belirtir. –

+0

Düzenleme arkadaşlarımı kontrol et –

cevap

27

QT'ın deyim QString ait arg() fonksiyonudur.

QString directory = QString(":/karim/pic%1.jpg").arg(i); 
+0

Biraz daha iyi "QStringLiteral (":/karim/pic% 1.jpg ") .sp (i);, derleme zamanında üretilen. https://woboq.com/blog/qstringliteral.html – Robin

2
#include <sstream> 
#include <string> 

int i = 5; 

std::stringstream s; 
s << ":/karim/pic" << i << ".jpg"; 

std::string directory = s.str(); 
+1

Sanırım s.str() 'değil,' s.string() ' –

+0

haklısınız, düzeltildiniz. –

+0

Düzenleme arkadaşlarım için düzenle –

11

: Bu çok benzer bir liner C++11 kullanılarak yapılabilir

(DÜZENLEME. Bu QString söz düzenlemek önce soruya bir cevap QString için the newer answer bakınız):

int i = 5; 
std::string directory = ":/karim/pic" + std::to_string(i) + ".jpg"; 

Testi: eski derleyicilerle https://ideone.com/jIAxE

, bu Boost ile ikame edilebilir :

int i = 5; 
std::string directory = ":/karim/pic" + boost::lexical_cast<std::string>(i) + ".jpg"; 

Testi: https://ideone.com/LFtt7

Ama bir dize akışı nesnesi ile yapmanın klasik bir yol.

int i = 5; 
std::ostringstream oss; 
oss << ":/karim/pic" << i << ".jpg"; 
std::string directory = oss.str(); 

Testi:

+0

İlginç. Hiç bilmedim, tüm bu süre içinde operatör + (const char *, const std :: string &) 'için bir aşırı yük vardı ve bu yüzden her zaman bir editörümü bir string kurgusuna sarmak zorunda kaldım. –

+0

Düzenleme arkadaşlarımı kontrol et –

+0

@Karim M. El Tel: Ohh, çünkü bir QString (düzenlemeden sonra), hexa'nın yorumuna git. Umarım bir cevap olarak gönderilebilmesi için tekrar açılacaktır. – Cubbi

İlgili konular