使用stringstream将int插入文件名

时间:2014-10-02 12:42:52

标签: c++ stringstream

我正在使用c ++ 98(因为这是大学服务器上安装的)。我试图将输出保存到文件。文件名必须是dice_N.dat,其中N是骰子的掷骰数,我称之为n_trials。我试过按照inserting int variable in file name的建议。当使用第二个建议时,我得到输出N.dat。这里是我的代码片段,试图这样做:

    ostringstream fileNameStream("dice_");
    fileNameStream << n_trials << ".dat";
    string fileName = fileNameStream.str();  
    ofstream myfile;
    myfile.open(fileName.c_str());

我无法使用to_string,因为c ++ 98

不支持此功能

6 个答案:

答案 0 :(得分:1)

ostringstream ss;
ss << "dice_" << n << ".dat";
myfile.open(ss.str().c_str());

答案 1 :(得分:0)

您可以使用std::to_stringstd::string创建int,然后连接。
事实上,我只会以这种方式制作整个文件名

std::string fileName = "dice_" + std::to_string(n_trials) + ".dat";

答案 2 :(得分:0)

使用:

ostringstream fileNameStream("dice_", std::ios_base::ate);

将流开放模式指定为ate

请参阅here

答案 3 :(得分:0)

只需使用<<运算符提供所有三个部分,由于不混合使用不同的语法,因此它更具可读性:

ostringstream fileNameStream;
fileNameStream << "dice_" << n_trials << ".dat";
//...

答案 4 :(得分:0)

出现问题是因为s​​td :: stringstream会覆盖初始缓冲区。

请改为尝试:

ostringstream fileNameStream;                    // let this be empty
fileNameStream << "dice_" << n_trials << ".dat"; // and pass "dice_" here
string fileName = fileNameStream.str();  
ofstream myfile;
myfile.open(fileName.c_str());

或者,您可以使用std::ios::ate作为标志创建ostringstream(ate告诉它应该在输入的末尾附加的流(然后,您仍然可以传递“dice_”部分在构造函数中,它不会被覆盖)。

答案 5 :(得分:0)

使用boost转换你的int:

boost::lexical_cast<std::string>(yourint) from boost/lexical_cast.hpp