好久不曾刷题,凌晨睡不着,找了道比较简单的练下手,久违的AC感觉,等这阵子忙完等级考试、比赛、论文的一堆破事,就全心投入刷题,准备PAT考试中去,再参加最后一次校赛。其实挺后悔没入校队的,真想到区域赛看看,真难过现在,想哭。往事已矣,立足当下,自勉,写完到A协睡觉去。
短语搜索
总提交 : 799 测试通过 : 248
比赛描述
输入
多行,每行以 # 为结束,第1行为一段英文文字(单词数、数字不多于500),其余行是待搜索的英文短语(单词数不多于10)。这里英文文字、英文短语只包含英文单词,这些单词以空格分隔。
输出
多行,每一行对应输入中给定的短语在文字中出现的最后一个位置,搜索不到时输出-1。
样例输入
STOCKHOLM April 21 PRNewswire FirstCall Students from St Petersburg State University of IT Mechanics and Optics are crowned the 2009 ACM International Collegiate Programming Contest World Champions in the Stockholm Concert Hall where the Nobel Prizes are presented every year Sponsored by IBM the competition took place today at KTH the Royal Institute of Technology #
STOCKHOLM #
St Petersburg State University of IT Mechanics and Optics #
World Champions #
the #
NUPT #
样例输出
1
8
26
51
-1
题目来源
南京邮电大学计算机学院首届ACM程序设计大赛(2009)
很久没写,然后当头有点蒙其实,连 连续输入 都没想起来要怎么写,
思路就是:定义两个string字符串,origin保存输入的原始字符串,comp保存进行比较的字符串,调用string自带函数rfind(),判断comp到底在不在origin中,如果不在就直接输出-1,进行下一次循环;如果在,就去查找字符串的位置,主要是短语的位置。关于短语位置的求取,我是用的方法也比较常规,就是统计‘ ’ 空格个数,输出的时候加1就行了,不难理解。
代码:
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int len = 500 + 10; int main() { string origin; string comp; // freopen("datain.txt", "r", stdin); while(getline(cin, origin)) { origin = origin.substr(0,origin.length()-1); while(getline(cin, comp)) { comp = comp.substr(0,comp.length()-1); int hh = static_cast<int>(origin.rfind(comp)); if(hh == -1) { printf("-1 "); } else { int cnt = 0; for(int i = 0; i <= hh; i++) { if(origin[i] == ' ') { cnt++; } } printf("%d ",cnt + 1); } comp.clear(); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。