2011-08-10 4 views
8

で2 QStringsを連結:+私は(つまり、directory:/karim/pic5.jpgでなければならない)、文字列と整数を連結することを意味しますは++ Qtの使用して、私はCでこのような何かをしたい整数

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

。これどうやってするの?

+11

C++ CONCATENATE文字列とint型http://stackoverflow.com/questions/191757/c-concatenate-string-and-int そこにそれを行うための8通りと答えがあります。 – Vache

+0

タグは彼が 'qt'の答えを望んでいることを示しています、" duplicate "の回答はそれを提供しません。 –

+0

私の編集者を確認してください –

答えて

27

このようなことのためにQtのイディオムはQStringののarg()機能です。

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

コンパイル時に生成される 'QStringLiteral(":/ karim/pic%1.jpg ")。arg(i);'が少し良いです。 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

私はそれが 's.str()'だと思います。 's.string()'ではなく –

+0

あなたが正しいと思っています。 –

+0

私の編集人を確認してください –

11

:これは非常によく似たワンライナーはC++11を使用して行うことができます

(EDIT。これはQStringの言及編集前の質問への答えであるQStringのために、the newer answerを参照してください):

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

テスト:古いコンパイラでhttps://ideone.com/jIAxE

、それはBoostで置換することができます:

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

テスト:https://ideone.com/LFtt7

しかし、それを行うには、古典的な方法は、文字列ストリームオブジェクトです。

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

テスト:https://ideone.com/6QVPv

+0

面白いです。私は今まで、 'operator +(const char *、const std :: string&)'のオーバーロードがあったので、文字列コンストラクタで常にリテラルをラップする必要があることを知りませんでした。 –

+0

私の編集者を確認してください –

+0

@Karim M. El Tel:Ohh、それはQString(編集後)なので、ヘキサのコメントに行ってください。うまくいけば、それは再開されるので、回答として投稿することができます。 – Cubbi

2

はにstringstreamを見てください:

http://cplusplus.com/reference/iostream/stringstream/

ostringstream oss(ostringstream::out); 

oss << ":/karim/pic"; 
oss << i 
oss << ".jpg"; 

cout << oss.str(); 
+1

私は何を含めるべきですか? –

+0

を含める必要があります。 –

+0

私の編集者を確認してください –

関連する問題