基本上我希望能够使用程序期间定义的两个变量创建文件名(程序员不知道的值)。我只能使用一个变量(即(用户名+“。txt”)),但出于某种原因使用两个混淆它。
这是我的代码。
void User::setTicket(std::string username, int i)
{
std::ofstream fout (username + "Ticket" + i + ".txt");
// Some code
fout.close();
}
int i本质上是一个在main循环中初始化的计数位,因此每次循环都会调用setTicket,希望调用生成的文件
user1Ticket1.txt
user1Ticket2.txt
user1Ticket3.txt
等
答案 0 :(得分:3)
数字类型不能隐式转换为字符串或直接附加到字符串。
在C ++ 11或更高版本中,有一个库函数可以转换它们:
std::ofstream fout (username + "Ticket" + std::to_string(i) + ".txt");
历史上,字符串流可以构建任意类型的字符串:
std::ostringstream ss;
ss << username << "Ticket" << i << ".txt";
std::ofstream fout (ss.str().c_str());
答案 1 :(得分:2)
您必须使用std::to_string(i)
(c ++ 11)将整数转换为字符串才能使用字符串的运算符+
另见:http://en.cppreference.com/w/cpp/string/basic_string/to_string
答案 2 :(得分:1)
基本上,有3种方法可以做到。
如果你有一个c ++ 11编译器,你可以使用std :: to_string(i),就像@Dlotan所指出的那样:
std::ofstream fout(username + "Ticket" + std::to_string(i) + ".txt");
如果你想使用boost:
std::ofstream fout(username + "Ticket" + boost::lexical_cast<std::string>(i) + ".txt");
如果你没有c ++ 11编译器,也不想使用boost:
stringstream ss;
ss << i;
std::ofstream fout(username + "Ticket" + ss.str() + ".txt");