65,208
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
class DonorInfo {
friend istream& operator>>(istream&, DonorInfo&);
friend ostream& operator<<(ostream&, const DonorInfo&);
public:
DonorInfo() : m_name(""), m_numOfDonations(0UL) { }
unsigned long getDonation() const { return m_numOfDonations; }
private:
string m_name;
unsigned long m_numOfDonations;
};
istream& operator>>(istream& is, DonorInfo& donorInfo)
{
string garbage;
getline(is, garbage);
getline(is, donorInfo.m_name);
is >> donorInfo.m_numOfDonations;
return is;
}
ostream& operator<<(ostream& os, const DonorInfo& donorInfo)
{
os << donorInfo.m_name << ": " << donorInfo.m_numOfDonations;
return os;
}
class DonorDB {
friend ostream& operator<<(ostream&, const DonorDB&);
public:
DonorDB(istream& is) {
is >> m_numOfDonors;
DonorInfo donorInfo;
while (is >> donorInfo) {
if (donorInfo.getDonation() <= 15000)
m_donorsA.push_back(donorInfo);
else
m_donorsB.push_back(donorInfo);
}
}
private:
unsigned int m_numOfDonors;
vector<DonorInfo> m_donorsA, m_donorsB;
};
ostream& operator<<(ostream& os, const DonorDB& donorDB)
{
os << donorDB.m_numOfDonors << endl;
cout << endl << "Donors A( <= 15000): " << endl;
for (vector<DonorInfo>::const_iterator it = donorDB.m_donorsA.begin();
it != donorDB.m_donorsA.end(); ++it)
os << *it << endl;
cout << endl << "DonorsB( > 15000): " << endl;
for (vector<DonorInfo>::const_iterator it = donorDB.m_donorsB.begin();
it != donorDB.m_donorsB.end(); ++it)
os << *it << endl;
return os;
}
int main()
{
ifstream ifile("123.txt");
DonorDB donorDB(ifile);
cout << donorDB;
ifile.close();
cin.get();
return 0;
}
仅简单的完成逻辑,没有做错误检测等等,仅供参考,也未必满足LZ的限制条件。
Input(123.txt):
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000
Ouput(console):
4
Donors A( <= 15000):
Sam Stone: 2000
Tammy Tubbs: 5000
DonorsB( > 15000):
Freida Flass: 100500
Rich Raptor: 55000
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
class DonorInfo {
friend istream& operator>>(istream&, DonorInfo&);
friend ostream& operator<<(ostream&, const DonorInfo&);
public:
DonorInfo() : m_name(""), m_numOfDonations(0UL) { }
unsigned long getDonation() const { return m_numOfDonations; }
private:
string m_name;
unsigned long m_numOfDonations;
};
istream& operator>>(istream& is, DonorInfo& donorInfo)
{
string garbage;
getline(is, garbage);
getline(is, donorInfo.m_name);
is >> donorInfo.m_numOfDonations;
return is;
}
ostream& operator<<(ostream& os, const DonorInfo& donorInfo)
{
os << donorInfo.m_name << ": " << donorInfo.m_numOfDonations;
return os;
}
class DonorDB {
friend ostream& operator<<(ostream&, const DonorDB&);
public:
DonorDB(istream& is) {
is >> m_numOfDonors;
DonorInfo donorInfo;
while (is >> donorInfo) {
if (donorInfo.getDonation() <= 15000)
m_donorsA.push_back(donorInfo);
else
m_donorsB.push_back(donorInfo);
}
}
private:
unsigned int m_numOfDonors;
vector<DonorInfo> m_donorsA, m_donorsB;
};
ostream& operator<<(ostream& os, const DonorDB& donorDB)
{
os << donorDB.m_numOfDonors << endl;
cout << endl << "Donors A( <= 15000): " << endl;
for (vector<DonorInfo>::const_iterator it = donorDB.m_donorsA.begin();
it != donorDB.m_donorsA.end(); ++it)
os << *it << endl;
cout << endl << "DonorsB( > 15000): " << endl;
for (vector<DonorInfo>::const_iterator it = donorDB.m_donorsB.begin();
it != donorDB.m_donorsB.end(); ++it)
os << *it << endl;
return os;
}
int main()
{
ifstream ifile("123.txt");
DonorDB donorDB(ifile);
cout << donorDB;
ifile.close();
cin.get();
return 0;
}
仅简单的完成逻辑,没有做错误检测等等,仅供参考,也未必满足LZ的限制条件。
Input(123.txt):
4
Sam Stone
2000
Freida Flass
100500
Tammy Tubbs
5000
Rich Raptor
55000
Ouput(console):
4
Donors A( <= 15000):
Sam Stone: 2000
Tammy Tubbs: 5000
DonorsB( > 15000):
Freida Flass: 100500
Rich Raptor: 55000
[/quote]赞一个,但这个章节还没接触到类呢