18

Qtを使用してC++でこのようなことをしたい:

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

ここで+、は文字列と整数を連結したいことを意味します(つまり、であるdirectory必要があります:/karim/pic5.jpg)。これどうやってするの?

4

4 に答える 4

38

このようなものに対するQtのイディオムは、arg()QStringの関数です。

QString directory = QString(":/karim/pic%1.jpg").arg(i);
于 2011-08-10T17:03:32.253 に答える
12

(編集:これは、QStringについて言及した編集前の質問に対する回答です。QStringについては、新しい回答を参照してください)

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

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

于 2011-08-10T13:25:30.117 に答える
2
#include <sstream>
#include <string>

int i = 5;

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

std::string directory = s.str();
于 2011-08-10T13:25:03.050 に答える
2

stringstreamを見てください:

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

ostringstream oss(ostringstream::out);

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

cout << oss.str();
于 2011-08-10T13:25:33.530 に答える