练习 14.35:编写一个类似于PrintString的类,令其从istream中读取一行输入,然后返回一个表示我们所读内容的string。如果读取失败,返回空string。
练习 14.36:使用前一个练习定义的类读取标准输入,将每一行保存为vector的一个元素。
练习 14.37:编写一个类令其检查两个值是否相等。使用该对象及标准库算法编写程序,令其替换某个序列中具有给定值的所有实例。
代码:
class PrintString {
public:
PrintString(ostream &o = cout, char c = ' '):
os(o), sep(c) { }
void operator()(const string &s)const {
os << s << sep;
}
private:
ostream &os;
char sep;
};
class ReadString {
public:
ReadString(istream &i = cin) :
is(i) { }
string operator() () {
getline(is, s);
if (is) return s;
else return string();
}
private:
string s;
istream &is;
};
class IsEqual {
public:
IsEqual(const string &_s = "") :
s(_s) { }
bool operator()(const string &lhs) {
return lhs == s;
}
private:
string s;
};
int main(int argc, char *argv[]) {
vector<string> vec;
ReadString rs;
while (cin) {
vec.push_back(rs());
}
cin.clear();
string value;
cin >> value;
replace_if(vec.begin(), vec.end(), IsEqual(value), "100");
for_each(vec.begin(), vec.end(), PrintString(cout, '*'));
return 0;
}
运行截图: