美文网首页
2018-12-02洛谷P1308统计单词数

2018-12-02洛谷P1308统计单词数

作者: 苏夜月 | 来源:发表于2018-12-02 11:33 被阅读0次

    这道题参考了一位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;
    }
    
    
    

    相关文章

      网友评论

          本文标题:2018-12-02洛谷P1308统计单词数

          本文链接:https://www.haomeiwen.com/subject/ilfjcqtx.html