2011-10-18 133 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;