Description
给定一个单词及一段文章作为输入,请你编程输出这个单词在文章中出现的次数,和单词第一次出现时首字母位于文章中的位置(文章中第一个字符位置为 0,第二个字符位置为1,依此类推,字符包含空格)。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须是文章中独立的单词,不能是某个单词中的一部分。例如:to 和 tomato 不能匹配。
Input
第 1 行为一个字符串,其中只含字母,表示给定单词(1≤字符串长度≤10)第 2 行为一个字符串,其中只包含字母和空格,表示给定的文章(1≤ 文章长度≤100000)。
Output
如果在文章中找到给定单词则输出两个整数,分别是单词在文章中出现的次数和第一次出现的位置,两个整数之间用一个空格隔开。如果单词在文章中没有出现,则直接输出一个整数-1。
Sample Input
To
to be or not to be is a question
Sample Output
2 0
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char tar[15];
char art[100005];
cin.getline(tar,15);
cin.getline(art,100005);
int n=strlen(art);
int m=strlen(tar);
//先统一转小写
for(int i=0;i<n;i++){
if(art[i]>='A'&&art[i]<='Z')art[i]+=32;
}
for(int i=0;i<m;i++){
if(tar[i]>='A'&&tar[i]<='Z')tar[i]+=32;
}
int f=-1,count=0;
int j,k;
for(int i=0;i<n;i++){
//不是第一个字母或前面没空格,不用比较
if(i!=0&&art[i-1]!=' ')continue;
j=0;
k=i;
while(tar[j++]==art[k++]&&j<m){}
//找到相同的,并且后面是空格或者是最后一个字母,则是一样的单词
if(j==m && (art[k]==' '||k==n)){
if(f==-1)f=i;
count++;
i=k-1;
}
}
if(count==0)printf("-1");
else printf("%d %d",count,f);
return 0;
}