社区讨论
求助自己哪里写挂了
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 条回复,欢迎继续交流。
正在加载回复...