這道題參考了一位dalao的題解黍翎,收獲很多
附上dalao題解的鏈接:https://www.luogu.org/blog/user11765/solution-p1308
那總的思路也就是
1滥搭、將輸入的單詞和文章都轉(zhuǎn)化為小寫字母毙沾,這個可以使用C語言自帶的tolower函數(shù)柑司,記得加上頭文件#include <ctype.h>
2醒叁、我們可以寫一個函數(shù)用來查找單詞的位置邀层,可以用#include <string.h>里頭的strstr(str1,str2)函數(shù)微饥,這個函數(shù)可以用來查找str2是不是str1的子串,如果是它的子串乒融,那么就會返回第一個字母相同時的位置掰盘,若果不是的話就會返回NULL
特別注意
注意全局變量和局部變量的定義,比如說輸入的單詞和文章赞季,應(yīng)該用全局變量愧捕,因為不僅僅在main函數(shù)重要使用到他們,我們自己定義的函數(shù)中也要用到他們
附上代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char s[11],k[1000001];
int count=0,flag=-1;
void find();
void find(char i[])
{
char *p=strstr(i,s);
int length=strlen(s);
if(p!=NULL)
{
if(((p==k)||(*(p-1)==' '))&&((*(p+length)==' ')||(*(p+length)=='\0'))) \\判斷是是不是單獨的單詞
{
if(flag==-1)
{
flag=p-k;
}
count++;
find(p+1);
}
else find(p+1);
}
}
int main()
{
gets(s);
gets(k);
int i,j;
int a=strlen(s);
int b=strlen(k);
for(i=0;i<a;i++)
{s[i]=tolower(s[i]);}
for(j=0;j<b;j++)
{k[j]=tolower(k[j]);}
find(k);
if(flag==-1)
{
printf("%d",flag);
}
else
printf("%d %d",count,flag);
return 0;
}