我有一些文件名如下:file1
,file2
,file3
等。
我有一个功能:
load(const char *file)
我会这样称呼load(file1)
,load(file2)
等等。
我正在尝试根据导入的文件数量更加动态地执行此操作。
因此,如果我有多个文件,请执行以下操作:
if (NUM_OF_FILES > 1) {
for (int i = 2; i <= NUM_OF_FILES; i++) {
load("file" + i);
}
}
然而,这不起作用。
有没有办法做到这一点?
答案 0 :(得分:4)
像"file"
这样的字符串文字的类型是char const[N]
(有一个合适的N
),当它第一次有机会时,它会愉快地衰变成char const*
。虽然T[N]
和int
之间没有添加功能,但char const*
和int
之间还有一个添加:它将int
添加到指针。这不是你想要的。
您可能希望将int
转换为合适的std::string
,将其与您获得的字符串文字相结合,并从中获取char const*
:
load(("file" + std::to_string(i)).c_str());
答案 1 :(得分:1)
这取决于您使用的C ++版本。如果是C ++ 11,解决方案将涉及std::to_string
。如果它是旧版本的C ++,您可以将整数转换为如下字符串:
#include <sstream>
// ...
std::ostringstream converter;
converter << i; // i is an int
std::string s(convert.str());
现在,load
函数需要const char *
。这是你自己的功能吗?然后考虑更改它以便它需要std::string const&
,并且您将能够直接传递字符串。否则,这就是如何将字符串的内容传递给它:
load(s.c_str());