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;
}
上一题
下一题