C++Primer第五版练习14.35、14.36、14.37

本文介绍了一个用于从输入流读取字符串并进行处理的实用类。通过定义ReadString类实现从标准输入读取多行文本,并将其存储在vector容器中。接着利用IsEqual类检查字符串值,结合STL算法replace_if替换指定值。最后展示如何打印处理后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习 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;
}

运行截图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值