L1-7 qls学习字符串 (20分)

qls最近在研究字符串问题,于是他找来他的好友强哥一起玩字符串小游戏,游戏规则如下:首先qls要给出一串字符串,强哥要先对其处理,首先将字符串中的所有数字变成空格;然后消除原文中多余空格,把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉,把原文中所有大写英文字母变成小写。处理完之后qls对强哥进行询问,每次将某些单词或字母或某句话(包括空格)替换成另一个单词或字母或另一句话(包括空格),强哥觉得qls在为难他,你能帮帮他完成这个游戏吗?
输入格式:

第一行一个整数n表示n次询问。(1≤n≤100)

第二行给出长度不超过10000的字符串,字符串为非空字符串,仅包括字母、数字、空格、可见的半角标点符号(包括逗号,句号.单引号’)。

接下来2n行表示n次询问内容,每次询问的第一行为被替换字符串(长度不超过20),第二行为替换成的字符串(长度不超过20)。
输出格式:

共n行,每行输出每次询问后按要求修改后字符串的组成。
样例
样例输入

2
qls TQL tai nb le
tql
nb
nb
tql

样例输出

qls nb tai nb le
qls tql tai tql le

提示

对于样例,首先将字符串处理为

qls tql tai nb le

然后将tql替换为nb
所以字符串为

qls nb tai nb le

又将nb替换为tql
所以字符串为

qls tql tai tql le

思考:只需要熟练运用sting的函数的用法即可很容易写出
string用法总结
https://blog.csdn.net/qq_45778406/article/details/109160360

#include<bits/stdc++.h>

using namespace std;
const int N = 100;
string s, tmp;
int main()
{
	int t;
	cin >> t;
	getchar();
	getline(cin, s);
	for(int i = 0; i < s.size(); i++)
	{
		if(s[i] >= '0' && s[i] <= '9')
			s[i] = ' ';
		s[i] = tolower(s[i]);
	}
	stringstream ss;
	ss << s;
	s = "";
	int cnt = 0;
	while(ss >> tmp)
	{
		if(tmp == "." || tmp == "," || tmp == "'")
		{
			if(tmp == "")
				s += tmp + " ";
			else
			{
				s.erase(s.size() - 1);
				s += tmp + " ";
			}
		}
		else
			s += tmp + " ";
	}
	if(s.back() == ' ')
		s.pop_back();
	//cout << s << endl;
	while(t --)
	{
		string s1, s2;
		getline(cin, s1);
		getline(cin, s2);
		int x = 0;
		while(1)
		{
			x = s.find(s1, x);
			if(x == -1)
				break;
			else
			{
				s.replace(x, s1.size(), s2);
			}
		}
		cout << s << endl;
	}
	return 0;
}

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值