0

テキストファイルを調べて、各行のさまざまな場所で特定の単語( "foobar")を見つける方法を考えていますが、新しいテキストファイルの同じ位置に単語を再配置します。これでうまくいかない場合は、お知らせください。検出。

***in text file***
1 foobar baz
2  foobar baz
3   foobar baz

****out text file***
1     foobar baz
2     foobar baz
3     foobar baz
4

1 に答える 1

1

ioマニピュレータstd::setw()fromを使用して、テキスト出力に固定長の列を作成できます。std:: setfill()を使用して、塗りつぶし文字を指定します。

std::cout << std::setw(5) << std::setfill('0') << 5 << std::endl;

印刷します:

00005

これは、あるファイルからすべての行を読み取り、それらを別のファイルに書き込むと同時に、すべての列を整列させる小さなプログラムを作成するために簡単に使用できます(以下のプログラムでは、>>は1つの列を読み取るために使用されます。つまり、列はinファイルでは、スペースで区切られ、1つ以上の空白文字で区切られていると見なされます):

#include <iostream>
#include <iomanip>
#include <vector>
#include <fstream>
#include <map>
#include <algorithm>

int main (int argc, char* arv[])
{
   using namespace std;

   std::vector<std::vector<std::string> > records;
   std::map<int, int> column_widths;

   std::ifstream in_file("infile.txt", std::ios::text);
   if (!in_file.is_open())
       return 1;

   std::ofstream out_file("outfile.txt", std::ios::text);
   if (!out_file.is_open())
       return 2;

   // read all the lines and columns into records
   std::string line;
   while (std::getline(in_file, line)) {
       std::istringstream is(line);
       std::vector<std::string> columns;
       std::string word;
       int column_index = 0;
       while (is >> word) {
           columns.push_back(word);
           column_widths[column_index] = std::max(column_width[column_index], word.length());
           ++column_index;
       }

       records.push_back(columns);
   }

   // now print all the records and columns with fix widths
   for (int line = 0; line < records.size(); ++line) {
       const std::vector<std::string>& cols = records[line]; 
       for (int column = 0; column < cols.size(); ++column) {
           out_file << std::setw(column_widths[column])
                    << std::setfill(' ')
                    << cols[column] << ' ';
       }
       out_file << "\n";
   }

   return 0;
}

私はプログラムをコンパイルしませんでしたが、動作するはずです:)。

于 2012-09-30T13:11:02.857 に答える