我是C ++的新手并且正在开发一个简单的项目。基本上我遇到问题的地方是在文件名中创建一个带数字(int)的文件。在我看来,我必须首先将int转换为字符串(或char数组),然后将此新字符串与文件名的其余部分连接起来。
到目前为止,我的代码无法编译:
int n; //int to include in filename
char buffer [33];
itoa(n, buffer, 10);
string nStr = string(buffer);
ofstream resultsFile;
resultsFile.open(string("File - ") + nStr + string(".txt"));
这会产生一些编译错误(在Linux中编译):
我在这里尝试过这样的建议:c string and int concatenation 在这里:Easiest way to convert int to string in C++没有运气。
如果我使用to_string方法,我最终会得到错误“to_string不是std的成员”。
答案 0 :(得分:6)
您可以使用stringstream
构建文件名。
std::ostringstream filename;
filename << "File - " << n << ".txt";
resultsFile.open(filename.str().c_str());
答案 1 :(得分:1)
您想使用boost::lexical_cast
。您还需要包含任何所需的标题:
#include <boost/lexical_cast>
#include <string>
std::string nStr = boost::lexical_cast<std::string>(n);
然后它只是:
std::string file_name = "File-" + nStr + ".txt";
因为std::strng
可以很好地使用字符串文字(例如“.txt”)。
答案 2 :(得分:1)
对于itoa
,您可能会遗漏#include <stdlib.h>
。请注意,itoa
是非标准的:将整数格式化为sprintf
和std::ostringstream
字符串的标准方法。
ofstream.open()
需要const char*
,而非std::string
。使用.c_str()
方法从后者获取前者。
把它放在一起,你正在寻找这样的东西:
ostringstream nameStream;
nameStream << "File - " << n << ".txt";
ofstream resultsFile(nameStream.str().c_str());
答案 3 :(得分:1)
std::ostringstream os;
os << "File - " << nStr << ".txt";
std::ofstream resultsFile(os.str().c_str());
使用std::to_string
(C ++ 11):
std::string filename = "File - " + std::to_string(nStr) + ".txt";
std::ofstream resultsFile(filename.c_str());
答案 4 :(得分:0)
答案 5 :(得分:0)
您可以使用std::stringstream
std::stringstream ss;
ss << "File - " << n << ".txt";
由于构造函数需要char指针,因此需要使用
将其转换为char指针ofstream resultsFile(ss.str().c_str());