2011-08-10 14 views
8

chcę zrobić coś takiego w C++ z użyciem Qt:Połączenie dwóch QStrings z całkowitą

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

gdzie + oznacza Chcę złączyć ciągi i całkowitą (czyli directory powinny być :/karim/pic5.jpg). Jak mogę to zrobić?

+11

C++ concatenate ciąg i int http://stackoverflow.com/questions/191757/c-concatenate-string-and-int Jest odpowiedź z 8 sposobów, aby to zrobić tam. – Vache

+0

Tagi oznaczają, że chce uzyskać odpowiedź dla 'qt', odpowiedzi w" duplikacie "tego nie zapewniają. –

+0

Sprawdź moich edytorów facetów –

Odpowiedz

27

idiom Qt dla rzeczy jak to jest funkcja arg() z QString.

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

Nieco lepiej jest 'QStringLiteral (":/karim/pic% 1.jpg "). Arg (i);', który jest generowany w czasie kompilacji. 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

Myślę, że to 's.str()', nie 's.string()' –

+0

masz rację, poprawił go. –

+0

sprawdź moje edytuj faceci –

11

(EDIT:. To jest odpowiedź na pytanie przed edit że wspomnianym QString Dla QString patrz the newer answer)

Można to zrobić w bardzo podobny jedno-liner użyciu C++11:

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

testu: https://ideone.com/jIAxE

z dużymi kompilatorów, może on być podstawiony Boost :

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

Test: https://ideone.com/LFtt7

Ale klasyczny sposób, aby zrobić to z obiektem strumienia ciąg.

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

Test: https://ideone.com/6QVPv

+0

Interesujące. Nigdy nie wiedziałem, przez cały czas, że było przeciążenie dla 'operatora + (const char *, const std :: string &)', więc zawsze będę musiał zawijać moje literały w konstruktorze ciągów. –

+0

sprawdź moich edytorów facetów –

+0

@Karim M. El Tel: Ohh, ponieważ to QString (po edycji), idź z komentarzem hexa. Mamy nadzieję, że zostanie on ponownie otwarty, aby mógł zostać opublikowany jako odpowiedź. – Cubbi

2

Wystarczy popatrzeć na stringstream:

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

ostringstream oss(ostringstream::out); 

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

cout << oss.str(); 
+1

co powinienem dołączyć? –

+0

Należy dołączyć . –

+0

sprawdź moje edytory faceci –

Powiązane problemy