2011-10-18 127 views
0

加入2個變量見的例子來理解如何在其他變量

int rnd = rand() %10; 
string Folder = "c://foldername"; 
string final_name = Folder + rnd; // here the target 

/* I want the result like that (random folder name) 
foldername5 
foldername10 
foldername3 
foldername20 
foldername17 
*/ 
+0

忌諱:'蘭特()/(RAND_MAX/10 + 1)'看到http://eternallyconfuzzled.com /arts/jsw_art_rand.aspx – sehe

+0

@sehe:謝謝你的信息 –

回答

2

在C++中使用stringstream將整數轉換爲字符串。

int rnd = rand() %10; 
string Folder = "c://foldername"; 
stringstream ss; 
ss << Folder << rnd; 
string final_name = ss.str(); // here the target 
3

使用std::stringstream爲:

#include <sstream> //include this 

std::stringstream ss; 
ss << Folder << rnd; 
string final_name = ss.str(); 

或者,你可以在一行中寫:

string final_name = stringbuilder() << Folder << rnd; 

它只需要一個小實用類:

struct stringbuilder 
{ 
    std::stringstream ss; 
    template<typename T> 
    stringbuilder & operator << (const T &data) 
    { 
     ss << data; 
     return *this; 
    } 
    operator std::string() { return ss.str(); } 
}; 

使用這個類,你可以在飛行中爲創建std::string

void f(const std::string & file) {} 

f(stringbuilder() << Folder << rnd); 

std::string s = stringbuilder() << 25 << " is greater than " << 5 ; 
2

在C++中做到這一點的最好辦法是使用stringstream

#include<sstream> 

... 

std::stringstream stream; 
stream << "c://foldername" << rand() %10; 
stream.str(); // now contains both path and number 
2

這樣說:

std::string final_name = Folder + std::to_string(rnd); 

如果你有一箇舊的編譯器不支持C++ 11,可以使用boost::lexical_cast,或std::snprintf或字符串流。

+0

to_string函數可以處理數據類型(long long,long double)但不能用(int,float) –

+0

@LionKing:我懷疑,超載是標準明確要求的(21.5.7)......也許你有一個破碎的編譯器?如果有幫助的話,你可以把值轉換爲long int或long long int。 –

-1

轉換rnd(它是在整數類型)string類型然後執行相同

string final_name = Folder + rnd;