0
#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;

int main() {

string firstFile, secondFile, temp;

ifstream inFile;
ofstream outFile;

cout << "Enter the name of the input file" << endl;
cin >> firstFile;

cout << "Enter the name of the output file" << endl;
cin >> secondFile;

inFile.open(firstFile.c_str());
outFile.open(secondFile.c_str());

while(inFile.good()) {  

    getline(inFile, temp, ' ');

        if (   temp.substr(0,4) != "-----"
            && temp.substr(0,5) != "HEADER" 
            && temp.substr(0,5) != "SUBID#"
            && temp.substr(0,5) != "REPORT"
            && temp.substr(0,3) != "DATE"
            && temp             != ""
            && temp             != "") 
        {
            outFile << temp;
        }
}

inFile.close();
outFile.close();

return 0;   
}

こんにちは、みんな。制御構造の基準を満たさないテキスト ファイルからすべての行を出力しようとしています。つまり、空白行がない、シンボルがないなどです。特定の要件。誰かが私が間違っていることを教えてくれれば、それは大歓迎です。

4

3 に答える 3

1

このようなリファレンスを見ると、 の 2 番目の引数がsubstr終了位置ではなく文字数であることがわかります。

これは、実際には と等しくないegtemp.substr(0,5)が返される可能性があることを意味します。これは、空でないすべての文字列が出力されることを意味します。"HEADE""HEADER"

また、現時点では、入力をスペースで区切るため、実際には行を読むのではなく単語を読むこと注意してください。

于 2013-03-01T15:09:18.980 に答える
0

ショートバージョン (C++11):

const std::vector<std::string>> filter {
    {"-----"}, {"HEADER"}, ... }; // all accepted line patterns here

while(getline(inFile, temp)) {
    for(const auto& s: filter)
        if (s.size() == temp.size() &&
            std::equal(s.begin(), s.end(), temp.begin()))

            outFile << temp;
于 2013-03-01T16:19:23.580 に答える
0

同じアクションを複数回繰り返す場合は、関数が必要な兆候です。

bool beginsWith( const std::string &test, const std::string &pattern )
{
   if( test.length() < pattern.length() ) return false;
   return test.substr( 0, pattern.length() ) == pattern;
}

まず、個別にテストできます。そうすれば、条件がはるかに単純になり、エラーが発生しにくくなります。

if ( !beginsWith( temp,  "-----" )
      && !beginsWith( temp, "HEADER" )
      && !beginsWith( temp, "SUBID#" )
      && !beginsWith( temp, "REPORT" )
      && !beginsWith( temp, "DATE" )
      && temp != "" ) 
于 2013-03-01T15:26:19.010 に答える