70分,有个问题求助,玄关
查看原帖
70分,有个问题求助,玄关
1073879
Karl_Wan楼主2024/10/24 20:42

https://www.luogu.com.cn/record/184569758

  • 目前是 #3,#7,#8 WA

  • 下载数据后发现,我的程序无法处理这种输入输出:

输入

2 4 2
a-b-c

标准输出

abc

程序输出

ab-c

这是因为程序里面只处理了前面的 a-b,然后就跳到了后面那个 -,因此出现了“顾此失彼”的错误。

请问各位dalao,这种错误该怎么处理?

玄关

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int p1,p2,p3;
string extend(char l,char m,char r)
{
	if(m!='-') 
	{
		return "";
	}
	if(l>='0'&&l<='9'&&r>='0'&&r<='9')
	{
		if(l>=r)
		{
			string rett;
			rett+=l;
			rett+=m;
			rett+=r;
			return rett;
		}
		string ret;
//		ret+=l;
		for(char i=l+1;i<r;i++)
		{
			if(p1==3)
			{
				for(int j=1;j<=p2;j++)
				{
					ret+='*';
				}
			}
			else
			{
				for(int j=1;j<=p2;j++)
				{
					ret+=i;
				}
			}
		}
		if(p3==2) reverse(ret.begin(),ret.end());
		ret=l+ret+r;
		return ret;
	}
	if(l>='a'&&l<='z'&&r>='a'&&r<='z')
	{
		if(l>=r)
		{
			string rett;
			rett+=l;
			rett+=m;
			rett+=r;
			return rett;
		}
		string ret;
		for(char i=l+1;i<r;i++)
		{
			if(p1==3)
			{
				for(int j=1;j<=p2;j++)
				{
					ret+='*';
				}
			}
			else if(p1==1)
			{
				for(int j=1;j<=p2;j++)
				{
					ret+=i;
				}
			}
			else
			{
				for(int j=1;j<=p2;j++)
				{
					ret+=char(i-32);
				}
			}
		}
		if(p3==2) reverse(ret.begin(),ret.end());
		ret=l+ret+r;
		return ret;
	}
	return "";
}
int main()
{
//	cout<<extend('-','-','0');
//	return 0;
	string s;
	cin>>p1>>p2>>p3>>s;
	for(int i=0;i<s.size();)
	{
		string t=extend(s[i],s[i+1],s[i+2]);
		if(t!="")
		{
			cout<<t;
			i+=3; 
		}
		else
		{
			cout<<s[i];
			i++;
		}
	}
	
	return 0;
}
2024/10/24 20:42
加载中...