Конкатенация двух строк QString с целым числом - PullRequest
11 голосов
/ 10 августа 2011

Я хочу сделать что-то подобное в C ++, используя Qt:

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

, где + означает, что я хочу объединить строки и целое число (то есть directory должно быть :/karim/pic5.jpg). Как я могу это сделать?

Ответы [ 4 ]

32 голосов
/ 10 августа 2011

Qt для таких вещей - функция arg() QString.

QString directory = QString(":/karim/pic%1.jpg").arg(i);
11 голосов
/ 10 августа 2011

(РЕДАКТИРОВАТЬ: это ответ на вопрос до редактирования, в котором упоминается 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

2 голосов
/ 10 августа 2011

Посмотрите на поток строк:

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

ostringstream oss(ostringstream::out);

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

cout << oss.str();
2 голосов
/ 10 августа 2011
#include <sstream>
#include <string>

int i = 5;

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

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