找单词 (Language:C++)

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;
}