我需要从文件中读取然后将该行分成3个字符串。 格式为: 第一个 The Secod _第三个(三个下划线) 这是家庭作业,他们建议我们使用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;
但是我在cout&lt;&lt; class1是输入文件的三个字段,没有 _ ,每个字段都在一个新行上。 当我尝试使用get()函数时,即使我声明了fstream,编译器也无法识别它。 这样做的一般算法是什么?
答案 0 :(得分: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;
}