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