测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33833. 找单词

填空题 困难

题目描述

找单词

题目描述

给定一个单词及一段文章,请你输出这个单词在文章中一共出现的次数,和单词第一次出现时首字母位于文章中的位置(文章中第一个字符位置为0,第二个字符位置为1.....,字符包含空格)。

注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须是文章中独立的单词,不能是某个单词中的一部分。例如:to 和 tomato 不能匹配。

输入

第1行为一个字符串,其中只含字母,表示给定单词(1≤ 字符串长度≤10)

第2行为一个字符串,其中只包含字母和空格,表示给定的文章(1≤ 文章长度≤100000)

输出

如果在文章中找到给定单词则输出两个整数,分别是单词在文章中出现的次数和第一次出现的位置,两个整数之间用一个空格隔开。如果单词在文章中没有出现,则直接输出一个整数-1。

样例输入

To

to be or not to be is a question

样例输出

2    0

参考答案

# include <iostream> # include <cstdio> # include <cstring> # include <string> using namespace std; string a,b; int cnt=0,fir; int main(){ cin>>a; cin.get(); getline(cin,b); for (int i=0;i<a.length();i++){ if (a[i]>='A'&&a[i]<='Z'){ a[i]+=32; } } for (int i=0;i<b.length();i++){ if (b[i]>='A'&&b[i]<='Z'){ b[i]+=32; } } if (a.length()>b.length()){ printf("%d",-1); return 0; } for (int i=0;i<b.length();i++){ bool flag=1; for (int j=0;j<a.length();j++){ if (b[i+j]==a[j]){ if (flag==0){ continue; } }else{ flag=0; } } if (flag==1&&b[i+a.length()]==' '&&(b[i-1]==' '||i==0)){ fir=i; break; } } for (int i=0;i<b.length();i++){ bool flag=1; for (int j=0;j<a.length();j++){ if (b[i+j]==a[j]){ if (flag==0){ continue; } }else{ flag=0; } } if (flag==1&&(b[i+a.length()]==' '||(i+a.length())==b.length())&&(b[i-1]==' '||i==0)){ cnt++; } } if (cnt==0){ printf("%d",-1); return 0; } printf("%d %d",cnt,fir); return 0; }
上一题 下一题