为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

Sgu/189

来自NOCOW
< Sgu
跳转到: 导航, 搜索
#include<cstdio>
#include<cmath>
#include<climits>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
 
using namespace std;
 
const int maxn=400;
 
typedef long long LL;
typedef long double LD;
typedef int array[maxn];
 
int n,m,e;
map<string,string>str;
 
string get_name(string line,int &j)
{
	string name;
	for(j=line.find_first_of('$',j)+1;'A'<=line[j]&&line[j]<='Z'||'a'<=line[j]&&line[j]<='z'||'0'<=line[j]&&line[j]<='9';j++)
		name+=line[j];
	if(!str.count(name))
		str[name]="";
	j=line.find_first_not_of(' ',j);
	return name;
}
string get_substr(string line,int &j,string &name,int &pos,int &len)
{
	string sub;
	stringstream s;
	j=line.find_first_of('(',j)+1;
	name=get_name(line,j);
	sub=str[name];
	j=line.find_first_of(',',j)+1;
	j=line.find_first_not_of(' ',j);
	for(;line[j]!=' '&&line[j]!=','&&line[j]!=')';j++)
		s<<line[j];
	s>>pos;
	if(pos<0)
		pos+=sub.size();
	s.clear();
	j=line.find_first_not_of(' ',j);
	if(line[j]==',')
	{
		j++;
		j=line.find_first_not_of(' ',j);
		for(;line[j]!=' '&&line[j]!=','&&line[j]!=')';j++)
			s<<line[j];
		s>>len;
		s.clear();
		if(len<0)
			len=sub.size()+len-pos;
	}
	else if(line[j]==')')
		len=sub.size()-pos;
	j=line.find_first_of(')',j)+1;
	j=line.find_first_not_of(' ',j);
	sub=sub.substr(pos,len);
	return sub;
}
 
int main()
{
#ifndef ONLINE_JUDGE
	freopen("data.in","r",stdin);
// 	freopen("data.out","w",stdout);
#endif
	string line;
	scanf("%d %d\n",&n,&m);
	for(int i=1;i<=n;i++)
	{
		int j=0; 
		string name,value;
		getline(cin,line);
		name=get_name(line,j);
		j=line.find_first_of('"',j)+1;
		for(;line[j]!='"';j++)
			value+=line[j];
		str[name]=value;
	}
	for(int i=1;i<=m;i++)
	{
		int j=0;
		getline(cin,line);
		j=line.find_first_not_of(' ',j);
		if(line[j]=='p')
		{
			j=line.find_first_of('(',j)+1;
			j=line.find_first_not_of(' ',j);
			if(line[j]=='$')
				cout<<str[get_name(line,j)]<<endl;
			else if(line[j]=='s')
			{
				string name;
				int pos=0,len=0;
				cout<<get_substr(line,j,name,pos,len)<<endl;
			}
		}
		else if(line[j]=='$')
		{
			string name1=get_name(line,j),name2;
			j=line.find_first_of('=',j)+1;
			j=line.find_first_not_of(' ',j);
			if(line[j]=='$')
			{
				name2=get_name(line,j);
				str[name1]=str[name2];
			}
			else if(line[j]=='s')
			{
				int pos=0,len=0;
				str[name1]=get_substr(line,j,name2,pos,len);
			}
		}
		else if(line[j]=='s')
		{
			string name1,name2;
			int pos1=0,len1=0,pos2=0,len2=0;
			get_substr(line,j,name1,pos1,len1);
			j=line.find_first_of('=',j)+1;
			j=line.find_first_not_of(' ',j);
			if(line[j]=='$')
			{
				name2=get_name(line,j);
				str[name1].replace(pos1,len1,str[name2]);
			}
			else if(line[j]=='s')
			{
				get_substr(line,j,name2,pos2,len2);
				str[name1].replace(pos1,len1,str[name2],pos2,len2);
			}
		}
	}
	return 0;
}
个人工具