使用变量命名的C ++文件

时间:2013-12-09 11:18:52

标签: c++ file filenames

基本上我希望能够使用程序期间定义的两个变量创建文件名(程序员不知道的值)。我只能使用一个变量(即(用户名+“。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

3 个答案:

答案 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");