4881283_wa.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 164 行

CPP
164
字号
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n,m;
struct zs
{
	string in,out;
	bool used;
}qz[55],qp[55];
char in[1000];
bool match(int &count)
{
	int i,j;
	int temp;
	for(i=0;i<n;i++)
	{
		temp=count;
		//判断哪种;
		int state;
		if(in[temp]>='A'&&in[temp]<='Z') 
		{
			if(in[temp+1]>='A'&&in[temp+1]<='Z') state=2;
			else state=1;
		}
		else state=3;
		for(j=0;j<qp[i].in.length();j++)
		{
			if(in[temp]==qp[i].in[j]||in[temp]==qp[i].in[j]+32||in[temp]==qp[i].in[j]-32) temp++;
			else break;
		}
		if(j==qp[i].in.length())
		{
			int k;
			switch(state)
			{
			case 1:if(qp[i].out[0]>='A'&&qp[i].out[0]<='Z') cout<<qp[i].out[0];
				else cout<<char(qp[i].out[0]-32);
				for(k=1;k<qp[i].out.length();k++)
				{
					char x=qp[i].out[k];
					if(x>='A'&&x<='Z') cout<<char(x-32);
					else cout<<x;
				}break;
			case 2:
				for(k=0;k<qp[i].out.length();k++)
				{
					char x=qp[i].out[k];
					if(x>='a'&&x<='z') cout<<char(x-'a'+'A');
					else cout<<x;
				}break;
			case 3:
				for(k=0;k<qp[i].out.length();k++)
				{
					char x=qp[i].out[k];
					if(x>='A'&&x<='Z') cout<<x-'A'+'a';
					else cout<<x;
				}break;
			}
			count+=qp[i].in.length();
			return true;
		}
	}
	for(i=0;i<m;i++)
	{
		temp=count;
		for(j=0;j<qz[i].in.length();j++)
		{
			if(in[temp]!=qz[i].in[j])
			{
				break;
			}
			else temp++;
		}
		if(j==qz[i].in.length())
		{
			if(qz[i].used==false)
			{
				cout<<qz[i].out<<" ("<<qz[i].in<<")";
				qz[i].used=true;
			}
			else cout<<qz[i].in;
			count+=qz[i].in.length();
			return true;
		}
	}
	return false;
}
int main()
{
	cin>>n>>m;
	int i,j;

	for(i=0;i<n;i++)
	{
		getchar();
		scanf("%[^\n]",in);
		j=0;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qp[i].in+=in[j];
			j++;
		}
		j++;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qp[i].out+=in[j];
			j++;
		}
	}
	for(i=0;i<m;i++)
	{
		getchar();
		scanf("%[^\n]",in);
		j=0;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qz[i].in+=in[j];
			j++;
		}
		j++;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qz[i].out+=in[j];
			j++;
		}
		qz[j].used=false;
	}
	getchar();
	while(1)
	{
		int state=scanf("%[^\n]",in);
		if(state==EOF)break;
		if(state==0) ;
		else
		if(in[0]=='#') 
		{
			cout<<"#";
			for(i=0;i<m;i++) qz[i].used=false;
		}
		else
		{
			j=0;
			while(in[j])
			{
				if(!match(j))
				{
					cout<<in[j];j++;
				}
			}
		}
		getchar();
		cout<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?