我正在使用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
答案 0 :(得分:1)
ostringstream ss;
ss << "dice_" << n << ".dat";
myfile.open(ss.str().c_str());
答案 1 :(得分:0)
您可以使用std::to_string
从std::string
创建int
,然后连接。
事实上,我只会以这种方式制作整个文件名
std::string fileName = "dice_" + std::to_string(n_trials) + ".dat";
答案 2 :(得分:0)
答案 3 :(得分:0)
只需使用<<
运算符提供所有三个部分,由于不混合使用不同的语法,因此它更具可读性:
ostringstream fileNameStream;
fileNameStream << "dice_" << n_trials << ".dat";
//...
答案 4 :(得分:0)
出现问题是因为std :: 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