连接字符串和数字

时间:2013-11-17 20:38:45

标签: c++ concatenation

我有一个带const char*参数的函数。我需要连接两个字符串文字和一个int来传递给这个参数。基本上这就是我想要做的事情:

open(const char* filename) {}

void loadFile(int fileID)
{
    open("file" + fileID + ".xml");
}

int main()
{
    loadFile(1);
    return 0;
}

如何尽可能简单地完成这项工作?我尝试更改loadFile函数以获取const char*然后执行open(std::string("file").c_str() + fileID + std::string(".xml").c_str());,但后来我得到error: invalid operands of types 'const char*' and 'const char*' to binary 'operator+'所以我很丢失。

5 个答案:

答案 0 :(得分:4)

您需要使用以下内容:

std::ostringstream os;
os << "file" << fileID << ".xml";
open(os.str().c_str());

答案 1 :(得分:4)

您可以按照之前的说明使用stringstreamBoost format

#include <boost/format.hpp>

void loadFile(int fileID)
{
  std::string filename = (boost::format("File%d.xml") % fileID).str();
  open(filename.c_str();
}

答案 2 :(得分:3)

如果您的编译器支持C ++ 11,您可以使用std::to_string来获取数字的字符串表示形式:

std::string filename = "file" + std::to_string(fileId) + ".xml";

但是,如果你有Boost可用,我认为使用Boost格式,正如Johan的回答所讨论的那样,更具可读性。

答案 3 :(得分:0)

使用to_string()

open("file" + to_string(fileID) + ".xml");

答案 4 :(得分:0)

C ++是c的超集。你可以使用sprintf:

void loadFile(unsigned int fileID)
{
   const int BUFFER_SIZE = 128;
   char buffer[BUFFER_SIZE];
   sprintf(buffer,"file%u.xml");
   open(buffer);
}

这是可移植的,应该对所有传入的(uint)值都是安全的等等。

如果您担心超出缓冲区,也可以使用snprintf(buffer,BUFFER_SIZE,....)。