1 条题解
-
0
自动搬运
来自洛谷,原作者为

起名真的很难
**搬运于
2025-08-24 21:35:45,当前版本为作者最后更新于2018-05-29 14:59:04,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这道题涉及了许多繁琐的步骤:
1.关键词判重
2.判断句子是否结束
3.大小写的统一
4.情书写得好不好关于第①点用一个use数组判断,若use[i]!=0那么word[i]就是出现过
第②点就是使用找那个句点,
很easy的第③点,这里推荐一个STL transform,还是比较好用的(tolower是变小写,toupper是变大写)
PS:本来找句点我还用了个好东西:
.find_first_of("."); .find_last_of("."); 就是找第一个(最后一个)句点,如果有就返回位置,没有就返回-1#include<bits/stdc++.h> using namespace std; int n,tot,use[2010]; string word[2010],sen,sent=""; int main() { scanf("%d",&n); for(int i=1;i<=n;++i)//++i比i++快 { cin>>word[i]; transform(word[i].begin(),word[i].end(),word[i].begin(),::tolower); //关键词变小写 } getchar();//不能少啊,坑我好久 getline(cin,sen); transform(sen.begin(),sen.end(),sen.begin(),::tolower);//整句变小写 for(int i=0;i<sen.size();++i) { if(sen[i]=='.')//如果是 . { for(int j=1;j<=n;++j) { if(sent==word[j]&&!use[j]) { use[j]=1,++tot; break;//其实这里还可以优化,但我懒 } } sent=""; memset(use,0,sizeof(use));//进入下一句,所有关键词又都可以增加好感 continue; } if(sen[i]==',') { for(int j=1;j<=n;++j) { if(sent==word[j]&&!use[j])//与句号类似,没有清空use数组 { use[j]=1,++tot; break; } } sent=""; continue; } if(sen[i]==' ') { for(int j=1;j<=n;++j) { if(sent==word[j]&&!use[j])//如果是空格说明一个单词结束了 { use[j]=1,++tot; break; } } sent=""; continue; } sent+=sen[i];//不是句点不是逗号不是空格,那肯定是字母了 } printf("%d",tot);//水完了 return 0; }我可不可以求一波赞٩(๑❛ᴗ❛๑)۶
- 1
信息
- ID
- 1256
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者