这道题参考了一位dalao的题解,收获很多
附上dalao题解的链接:https://www.luogu.org/blog/user11765/solution-p1308
那总的思路也就是
1、将输入的单词和文章都转化为小写字母,这个可以使用C语言自带的tolower函数,记得加上头文件#include <ctype.h>
2、我们可以写一个函数用来查找单词的位置,可以用#include <string.h>里头的strstr(str1,str2)函数,这个函数可以用来查找str2是不是str1的子串,如果是它的子串,那么就会返回第一个字母相同时的位置,若果不是的话就会返回NULL
特别注意
注意全局变量和局部变量的定义,比如说输入的单词和文章,应该用全局变量,因为不仅仅在main函数重要使用到他们,我们自己定义的函数中也要用到他们
附上代码:
#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;
}
网友评论