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*する必要があります (必要な文字数に NULL ターミネータの 1 を加えた数)。次に、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 に答える