【题解】洛谷P2264 情书(字符串 模拟)

显然这道题我们用字符串存储感动词汇,然后读入正文时读一整行,比较部分字符串会更方便 这里学到了几招。

1.要考虑把大写都转成小写,不会stl库就将所有大写字母加上'a'-'A',就变成小写形式了。

2.初始化一个空白字符串 sent=“”,然后在读入正文时倘若读到的不是空格/逗号/句号,就令sent+=zw[i],可以直接将字符类型变成字符串。注意在判断空格/逗号/句号末尾将sent变回“”即可

(不过不用这种方法其他的都好难啊。。。难怪提高+/省选-难度 题解里有一篇介绍这个的讲得很好)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
using namespace std;
int n;
string move[2010];
string sent="";
string wow="";
string zw;
string s;
bool b[2010];
int ans=0;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		wow="";
		int len=s.size();
		for(int j=0;j<len;j++)
		{
			if(s[j]>='A'&&s[j]<='Z') s[j]+='a'-'A';
			wow+=s[j];
		}
		move[i]=wow;
	}
	getchar();
	getline(cin,zw);
	int len=zw.size();
	for(int i=0;i<len;i++)
	{
		if(zw[i]>='A'&&zw[i]<='Z') zw[i]+='a'-'A';
	}
	for(int i=0;i<len;i++)
	{
		if(zw[i]=='.')
		{
			for(int j=1;j<=n;j++)
			{
				if(sent==move[j]&&!b[j])
				{
					b[j]=true;
					ans++;
					break;
				}
			}
			sent="";
			memset(b,false,sizeof(b));
			continue;
		}
		if(zw[i]==','||zw[i]==' ')
		{
			for(int j=1;j<=n;j++)
			{
				if(sent==move[j]&&!b[j])
				{
					b[j]=true;
					ans++;
					break;
				}
			}
			sent="";
			continue;
		}
		sent+=zw[i];
	}
	printf("%d",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Rem_Inory/article/details/81808409