-
- 88通过
- 971提交
- 题目提供者lin_toto
- 标签字符串
- 难度提高+/省选-
提交该题 讨论 题解 记录
最新讨论
- yyy快把题目改回来
- 噫
- 这题的题目好逗啊。。。
- 情书std
题目背景
一封好的情书需要撰写人全身心的投入。崔君阳同学看上了一中的许芳煜想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。
PS:御坂 美琴・高坂 穂乃果・アズキ・ワニら・チョコラ最高!
题目描述
为了帮助他,我们定义一个量化情书好坏的标准感动值。判断感动值的方法如下:
1.在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每一单词在同一句话中出现多次感动值不叠加,不同单词不受影响。保证输入的单词不重复。
2.每句话以英文句号定界。
3.全文不区分大小写。
输入输出格式
输入格式:第一行包含一个数字n,表示导致感动值提升的词汇列表中单词的数量,随后n行是给定单词,每行一个。保证单词只包含英文字母。
最后一行为情书正文,保证只包含以下几种字符: 英文字母、数字、空格、英文逗号、英文句号。
输出格式:一个数字g,表示情书带来的感动值。
输入输出样例
输入样例#1:
3 love so much I love you so much.
输出样例#1:
3
说明
对于所有的数据,保证1 ≤ n,m,k ≤ 100,每个单词不超过50字符,全文不超过1000字符。
分析:读懂题目非常关键,单词是连续出现的,而不是寻找子串,而且单词之间会有符号分割,左右用string保存,不断地更新string,然后与每个没有出现过的单词进行比对即可,要注意这种字符串的题目大多都有一个enter在输入里,所以在输入情书之前要加上一个getchar()来过滤enter.
#include <cstdio> #include <string> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn = 110; int vis[maxn],ans,n; string s[maxn],sentence; string zhuanhuan(string x) { for (int i = 0; i < x.size(); i++) //统一将大写转换为小写 if (x[i] >= 'A' && x[i] <= 'Z') x[i] = x[i] - 'A' + 'a'; return x; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) cin >> s[i]; getchar(); //读取enter. getline(cin, sentence); for (int i = 0; i < sentence.size(); i++) { if (sentence[i] == '.') memset(vis, 0, sizeof(vis)); else if (sentence[i] != ' ' && sentence[i] != ',') { string temp; for (; sentence[i] != ' ' && sentence[i] != ',' && sentence[i] != '.'; i++) temp += sentence[i]; i--; for (int j = 1; j <= n; j++) if (zhuanhuan(temp) == zhuanhuan(s[j]) && !vis[j]) { ans++; vis[j] = 1; break; } } } printf("%d ", ans); return 0; }