5

いくつかのファイル (.txt) を作成し、その結果を書き留めるプログラムを C++ で作成しようとしています。問題は、これらのファイルの量が最初に固定されておらず、プログラムの最後近くにしか表示されないことです。これらのファイルに「file_1.txt」、「file_2.txt」、...、「file_n.txt」という名前を付けたいと思います。n は整数です。

ファイル名には「const char*」型が必要であり、「string」をこの型に変換する方法が見つからなかったため、連結を使用できません。インターネットで答えが見つからないので、助けていただければ幸いです。

4

5 に答える 5

7

メンバー関数を使用してconst char*からを取得できます。std::stringc_str

std::string s = ...;
const char* c = s.c_str();

使用したくない場合std::string(おそらくメモリ割り当てを行いたくない場合)、 を使用snprintfしてフォーマットされた文字列を作成できます。

#include <cstdio>
...
char buffer[16]; // make sure it's big enough
snprintf(buffer, sizeof(buffer), "file_%d.txt", n);

nここにファイル名の番号があります。

于 2012-10-28T12:59:53.723 に答える
7
 for(int i=0; i!=n; ++i) {
     //create name
     std::string name="file_" + std::to_string(i) + ".txt"; // C++11 for std::to_string 
     //create file
     std::ofstream file(name);
     //if not C++11 then std::ostream file(name.c_str());
     //then do with file
 }
于 2012-10-28T13:04:11.587 に答える
3

... ファイル名を作成する別の方法

#include <sstream>

int n = 3;
std::ostringstream os;
os << "file_" << n << ".txt";

std::string s = os.str();
于 2012-10-28T13:06:12.237 に答える
1

サンプルコード:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

string IntToStr(int n) 
{
    stringstream result;
    result << n;
    return result.str();
}

int main () 
{
    ofstream outFile;
    int Number_of_files=20;
    string filename;


  for (int i=0;i<Number_of_files;i++)
  {
        filename="file_" + IntToStr(i) +".txt";
        cout<< filename << "  \n";

        outFile.open(filename.c_str());
        outFile << filename<<" : Writing this to a file.\n";
        outFile.close();
  }


  return 0;
}
于 2012-10-28T19:12:58.947 に答える