1

私はしばらく問題に悩まされていて、答えが見つからないようです。同じ名前で最後に異なる番号の複数のファイルを作成しようとしていますが、最初はこれを使用するだけでこれを試みました

int seq_number = 1;
while (seq_number < 10)
{
ofstream fsave;
fsave.open("filename" + seq_number + ".txt");
fsave << "blablabla";
fsave.close();
seq_number = seq_number + 1;
}

しかし、それは文字がごちゃごちゃになるという非常に奇妙な結果をもたらします。それがどのように機能するかはわかりませんが、機能しないことはわかっています。

私はオンラインで見て、stringstreamまたはsstreamを見つけてそれを試しましたが、それでもエラーが発生し続けます。

string filename;
filename = "character";
ostringstream s;
s << filename << seq_number;
filename(s.str());
fsave.open(filename + ".txt");
fsave << "blabla"
fsave.close(;)

しかし、私はエラーが発生し続けます:

`(std::string) (std::basic_string, std::allocator >)' の呼び出しに一致しません

文字列ストリームがどのように機能するのか正確にはわからないので、本能的に作業していますが、これが可能な方法であればありがたいです。正直なところ、sstreamなしでそれを行うことを好むと思いますが、intとstrを取得する方法が必要です一緒に、文字列であるファイル名を保存します。もっと良い方法を知らない限り;)みんなありがとう

4

5 に答える 5

0

次のように実行できます。

ostringstream s;
s << "character" << seq_number << ".txt";
fsave.open(s.str());
fsave << "blabla";
fsave.close();

そして、これは元のループを実装する方法です:

for (int seq_number = 1; seq_number<10; ++seq_number) 
{
    ostringstream s;
    s << "filename" << seq_number << ".txt";
    ofstream fsave(s.str());
    fsave << "blablabla";
}
于 2013-08-28T13:54:32.913 に答える
0

交換

fsave.open(filename + ".txt");

fsave.open( (filename + ".txt").c_str() );

これは、コンストラクターがではなくofstreama をパラメーターとして受け取るためです。char const *std::string

char *また、最初のバージョンでは奇妙なファイル名が生成されます。これは、C および C++ では、文字配列内の単純なオフセットに整数を追加するためです。文字列には追加されません。

于 2013-08-28T13:53:59.147 に答える
0

次のようなことができます。

#include <iostream>
#include <string>
#include <sstream>

int main (int argc, char const* argv[])
{
    std::string filename;
    int seq_number = 10;
    filename = "character";
    std::stringstream s;
    s << filename << seq_number << ".txt";
    filename = s.str();
    std::cout<< filename << std::endl; // <-- Here open your file instead print the filename
}
于 2013-08-28T14:18:18.020 に答える