1

在我的程序中需要打开大约 50 个文件以供阅读,我将所有文件从 1.txt 重命名为 50.txt 希望我可以通过增加文件号的循环传递文件名,但我不知道如何/不认为可以将整数传递给 char 或者是否有更好的方法来解决我的情况。

char* filename = "";

for(int i =0; i < 50; i++)
{
if(i == 0){filename = "0.txt";}
if(i == 1){filename = "1.txt";} // ..
int num = 0, theinteger = 0;
ifstream in(filename, ios::binary);
unsigned char c;
while( in.read((char *)&c, 1) )
{       
        in >> theinteger;
        sca.chac[num]=theinteger; 
        num++;
}
}

return 0;
4

3 回答 3

5

有一种相对简单的方法 - 在 C 中,使用sprintf函数,如下所示:

char filename[100];
sprintf(filename, "%d.txt", i);

在 C++ 中,使用ostringstream

ostringstream oss;
oss << i << ".txt";
于 2012-07-05T10:27:58.873 回答
3

只需构建代表您必须使用以下之一打开的文件名称的字符串:

stringstream ss;
ss << anIntVal;
mystring = ss.str() + ".txt";

或者

mystring = boost::lexical_cast<string>(anIntVal);
mystring += ".txt"
于 2012-07-05T10:27:26.783 回答
0

看看sprintf函数。它就像 printf 函数一样工作,但它打印到char*. 您必须确保char*足够大(您需要的字符数加上 1 用于 NULL 终止符)。然后,您可以在 for 循环中增加文件编号并使用 sprintf 函数更新char* filename,然后打开文件。

在你的情况下:

char* filename[10];
int i;
for( i = 0; i <= 50; ++i){
    sprintf(filename,"%i.txt",i);
    //do stuff with the files
}

我发现它很有用(对于很好的排序,例如使用填充文件名,这也使得分配空间char*更容易:

char* filename = "50.txt"; //the highest number should fit
int i;
for( i = 0; i <= 50; ++i){
    sprintf(filename,"%02i.txt",i);
    //do stuff with the files
}

希望这对你有帮助!

于 2012-07-05T10:41:17.707 回答