4880332_wa.cpp

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

CPP
163
字号
#include<iostream>
#include<string>
using namespace std;
int n,m;
struct zs
{
	string in,out;
	bool used;
}qz[55],qp[55];
char in[1000];
int com1(const void*p1,const void*p2)
{
	zs q1=*(zs*)p1;
	zs q2=*(zs*)p2;
	int i;
	bool l1=false,u1=true,f1;
	bool l2=false,u2=true,f2;
	if(q1.in[0]>='A'&&q1.in[0]<='Z') f1=true;
	else f1=false;
	if(q2.in[0]>='A'&&q2.in[0]<='Z') f2=true;
	else f2=false;
	for(i=0;i<q1.in.length();i++) 
	{
		if(q1.in[i]==' ') l1=true;
		if(!(q2.in[i]>='A'&&q2.in[i]<='Z')) u1=false;
	}
	for(i=0;i<q2.in.length();i++) 
	{
		if(q2.in[i]==' ') l2=true;
		if(!(q2.in[i]>='A'&&q2.in[i]<='Z')) u2=false;
	}
	if(l1&&!l2) return -1;
	else if(!l1&&l2) return 1;
	else 
	if(u1&&!u2) return -1;
	else if(!u1&&u2) return 1;
	else 
	if(f1&&!f2) return -1;
	else if(!f1&&f2) return 1;
	else  return q1.in.compare(q2.in);
}
bool match(int &count)
{
	int i,j;
	int temp;
	for(i=0;i<n;i++)
	{
		temp=count;
		for(j=0;j<qp[i].in.length();j++)
		{
			if(in[temp]!=qp[i].in[j])
			{
				break;
			}
			else temp++;
		}
		if(j==qp[i].in.length())
		{
			cout<<qp[i].out;
			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()&&!qz[i].used)
		{
			cout<<qz[i].out<<" ("<<qz[i].in<<")";
			qz[i].used=true;
			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;
	}
	qsort(qp,n,sizeof(qp[0]),com1);
	qsort(qz,m,sizeof(qz[0]),com1);
	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;
			string word;
			while(in[j])
			{
				if(!match(j))
				{
					cout<<in[j];j++;
				}
			}
		}
		getchar();
		cout<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

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