社区讨论

求助自己哪里写挂了

P8289[省选联考 2022] 预处理器参与者 4已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lo90jysl
此快照首次捕获于
2023/10/28 03:35
2 年前
此快照最后确认于
2023/10/28 03:35
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
map<string,string>mp;
bool pd(char c)
{
	return c>='0'&&c<='9'||c>='a'&&c<='z'||c>='A'&&c<='Z';
}
void zk(string s)
{
	if(mp[s]=="")
	{
		cout<<s;
		return;
	}
	string t=mp[s],p=s;
	mp[s]="";
	s=t;
	int now=0;
	while(now<s.size())
	{
		string ss;
		for(;now<s.size();++now)
		{
			if(!pd(s[now]))
				break;
			ss+=s[now];
		}
		zk(ss);
		if(now==s.size())break;
		printf("%c",s[now]);
		++now;
	}
	mp[p]=t;
}
int main()
{
    //freopen("preprocessor.in","r",stdin);
	//freopen("preprocessor.out","w",stdout);
	cin>>n;
	getline(cin,s);
	for(int i=1;i<=n;++i)
	{
		getline(cin,s);
		if(s[0]=='#')
		{
			printf("\n");
			string s1,s2,s3;
			int now=1;
			for(;;++now)
			{
				if(!pd(s[now]))
					break;
				s1+=s[now];
			}
			for(++now;;++now)
			{
				if(!pd(s[now]))
					break;
				s2+=s[now];
			}
			for(++now;now<s.size();++now)
				s3+=s[now];
			if(s1=="define")
				mp[s2]=s3;
			else
				mp[s2]="";
		}
		else
		{
			int now=0;
			while(now<s.size())
			{
				string ss;
				for(;now<s.size();++now)
				{
					if(!pd(s[now]))
						break;
					ss+=s[now];
				}
				zk(ss);
				if(now<s.size())
				printf("%c",s[now]);
				++now;
			}
			printf("\n");
		}
	}
	return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...