1

我是 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 中编译):

  1. itoa 未在此范围内声明
  2. 没有匹配函数调用 'std::basic_ofstream char, std::char_traits char ::open(std::basic_string char, std::char_traits char , std::allocator char)'</li>

我在这里尝试了建议:c string and int concatenation 和这里:在 C++ 中将 int 转换为字符串的最简单方法,但没有运气。

如果我使用 to_string 方法,我最终会出现错误“to_string not a member of std”。

4

6 回答 6

6

您可以使用 astringstream来构造文件名。

std::ostringstream filename;
filename << "File - " << n << ".txt";
resultsFile.open(filename.str().c_str());
于 2013-09-10T18:52:11.670 回答
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”)。

于 2013-09-10T18:49:52.507 回答
1

因为itoa,你很可能失踪了#include <stdlib.h>。请注意,这itoa是非标准的:将整数格式化为字符串的标准方法sprintfstd::ostringstream.

ofstream.open()需要一个const char*,不是std::string。用.c_str()方法从后者得到前者。

把它放在一起,你正在寻找这样的东西:

ostringstream nameStream;
nameStream << "File - " << n << ".txt";
ofstream resultsFile(nameStream.str().c_str());
于 2013-09-10T18:52:01.103 回答
1

使用std::ostringstream

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());
于 2013-09-10T19:03:46.543 回答
0

您可以使用std::stringstream

std::stringstream ss;
ss << "File - " << n << ".txt";

由于构造函数需要一个 char 指针,因此您需要使用将其转换为 char 指针

ofstream resultsFile(ss.str().c_str());
于 2013-09-10T19:07:55.207 回答
0

对于 itoa 函数

include <stdlib.h>

考虑这个链接

http://www.cplusplus.com/reference/cstdlib/itoa/

于 2013-09-10T19:01:16.933 回答