5-1 字符串替换   (10分)

将文本文件中指定的字符串替换成新字符串。 由于目前的OJ系统暂时不能支持用户读入文件,我们编写程序从键盘输入文件中的内容,当输入的一行为end时,表示结束。end后面有两个字符串,要求用第二个字符串替换文本中所有的第一个字符串。

输入格式:

Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology. The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

end (表示结束)

Institute (第一个字符串,要求用第二个字符串替换)

University (第二个字符串)

输出格式:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

输入样例:

Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.
The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
end
Institute
University

输出样例:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.
The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.


解析:使用string容器中的find来查找,replace来替换。另外需注意换行,使用getline来确定哪里需要换行。

关于find函数的返回值:1、找到,返回找到字符的地址或字符串的首地址; 2、没找到,返回string::npos

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main () {
	int found;
	string s1, s2, s;
	vector<string> v;
	getline(cin, s); //接收一串子直到碰到换行符(不包括换行符) 
	v.push_back(s + '\n');
	while (1) {
		getline(cin, s);
		if ( s.compare("end") == 0 )	//相等返回0.小于返回负数,反之正数 
			break;
		else {
			s += '\n';
			v.push_back(s);
		}
	}
	cin >> s1 >> s2;
	for ( int i = 0; i < v.size(); i++ ) {
		found = v[i].find(s1);
		// std::string::npos = -1
		while ( found != std::string::npos ) {
			//从第found个元素开始,连续s1.lenth()个元素,替换s2 
			v[i].replace(found, s1.length(), s2);
			//找下一个s1  
			found = v[i].find(s1, found + 1);
		}
	}
	vector<string>::iterator it;
	for ( it = v.begin(); it != v.end(); it++ ) {
		cout << *it;
	}
	return 0;
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值