C ++ int to string,连接字符串

时间:2013-09-10 18:43:15

标签: c++ string g++

我是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)'
  3. 我在这里尝试过这样的建议:c string and int concatenation 在这里:Easiest way to convert int to string in C++没有运气。

    如果我使用to_string方法,我最终会得到错误“to_string不是std的成员”。

6 个答案:

答案 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是非标准的:将整数格式化为sprintfstd::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

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)

for itoa功能

include <stdlib.h>

考虑此链接

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

答案 5 :(得分:0)

您可以使用std::stringstream

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

由于构造函数需要char指针,因此需要使用

将其转换为char指针
ofstream resultsFile(ss.str().c_str());