0

ファイルから読み取ってから、行を3つの文字列に分割する必要があります。形式は次のとおりです。Afirst_TheSecod _Third(3つのアンダースコア)これは宿題であり、getlineを使用して無視することを提案しています。ので、私は持っています:

    main()
    ifstream inf("file.txt")
    while(inf)
    {inf >> class1;
    cout << class1;
    }
    class THECLASS
    {string a, b, c;
    public:
    friend void operator>>(ifstream &inf, THECLASS &class1)
    {getline(inf, class1.a, '_');
    inf.ignore();
    inf.ignore();
    [if I put getline class1.b, the whole line will go into it, overwriting .a]
    }

and in operator<<, I have

    os << class1.a << class1.b;
    return os;

しかし、<< class1をcoutしたときに得られるのは、_を含まない入力ファイルの3つのフィールドすべてであり、それぞれが新しい行にあります。get()関数を使おうとすると、fstreamを宣言してもコンパイラが認識しません。それを行うための一般的なアルゴリズムは何ですか?

4

1 に答える 1

0

これがあなたを助けることを願っています。

// assume the content of infile : 
//First1_xxSecond1_xxThird1
//Firts2_xxSecond2_xxThird2
//First3_xxSecond3_xxThird3
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class MyClass
{   
public:
    string a, b, c;
};
ifstream& operator>>(ifstream &inf, MyClass& class1)
{
    getline(inf, class1.a, '_');    //"First" into class1.a
    inf.ignore(2,EOF);              //skip "xx"
    getline(inf, class1.b, '_');
    inf.ignore(2, EOF);
    getline(inf, class1.c);
    return inf;
}
ostream&  operator<<(ostream& out, const MyClass& class1)
{
    out<< class1.a << "_"<< class1.b<< "_" << class1.c;
    return out;  
}
int main () { 
    MyClass class1;
    ifstream  stream("test.txt");
    while(stream.rdstate()  != ifstream::eofbit)
    {
        stream >> class1;
        cout << class1 <<"\n";  //First1_Second1_Third1 for the first loop.ect
    }
    return 0;
}
于 2012-05-27T04:16:31.300 に答える