2012-05-27 2 views
0

Мне нужно прочитать из файла, а затем разбить строку на 3 строки. Формат: A first_ Secod _Third (три символа подчеркивания) Это домашнее задание, и они предлагают нам использовать getline и игнорировать. поэтому у меня есть:Чтение из файла (ifstream) и сортировка

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; 

Но все, что я получаю, когда я COUT < < Class1 все три поля ввода файла без _, каждый на новой строке. Когда я попытался использовать функцию get(), компилятор не узнает ее, даже если я объявил fstream. Каков общий алгоритм его выполнения?

ответ

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; 
} 
+0

На самом деле есть три индекса. В этом случае мне понадобятся два оператора inf.ignore(), не так ли? Тем не менее, для моей последней записи он правильно читает b c, а затем создает другие b и c. Я думаю, что есть проблема с моим классом, хотя .... – user1078719

+0

Извините за непонимание u point, u хотите First_Second_Third в качестве выходного формата? я просто подумал, что это формат inf, можно ли дать мне исходный формат данных? если u хочет формат вывода, в операторе << os << class1.a << "_" << class1.b; – Ticks

+0

Спасибо за работу, клещи! Ваш первый код помог мне решить его. Я вошел в одну дополнительную строку в inf, потому что у меня не было заявления о разводе в правильном месте, но для остальных это отлично работало! – user1078719