统计单词数

Posted wsy107316

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计单词数相关的知识,希望对你有一定的参考价值。

统计单词数

https://www.luogu.org/problemnew/show/P1308

大佬的题解粘来学习

AC代码:

 

技术图片
 1 #include <cstring>
 2 #include <cctype>
 3 #include <cstdio>
 4 
 5 void strlower (char *a) //手写函数,将大写字母转换成小写字母
 6     for(int i = 0; a[i]; i ++ ) 
 7         if(isupper(a[i])) a[i] = tolower(a[i]);//isupper是判断是否是大写字母的系统函数,tolower是将其转换成小写字母的函数
 8     
 9 
10 
11 int main () 
12 
13     char destination[1000001], *q, source[11], *p;//destintion是要找的文章,source是要找的单词,p和q都是指针类,分别代表当前搜索到什么地方了和最后一次找到单词的指针
14     bool flag = false;//判断是否找到了
15     int ans = 0, ans1 = -1;//个数和首次出现的位置,ans1的初值是-1是因为在没找到的时候就直接输出就行了,省事
16 
17     gets(source);
18     gets(destination);//输入
19 
20     strlower(destination);//全部转换成小写字母
21     strlower(source);
22 
23     int len = strlen(source);//长度,在后面防止越界和加快速度
24 
25     p = destination;//先将指针设为全部
26 
27     for(; q = strstr(p, source); ) //循环,strstr是在一个字符串里面给定一个字符串,寻找有没有这个字符串,若有,返回首次出现的指针否则返回NULL(空指针)
28         if( q != NULL//找到了 
29         && ( q == destination || *(q - 1) ==  ) //第一个条件是防止越界,第二个是判断前一个是不是空格
30         && ( *(q + len) == \0 || *(q + len) ==   ) ) //如果后面也是空格
31             ans ++ ;//答案加一
32             if(flag == false) //如果是首次找到
33                 flag = true;
34                 ans1 = q - destination;//第一个位置
35             
36         
37         p = q + len;//刷新指针
38     
39 
40     if(flag == true)//找到了
41         printf("%d %d" , ans, ans1);//输出
42     else 
43         printf("%d", ans1);//输出-1
44 
45     return 0;
46 
View Code

 

以上是关于统计单词数的主要内容,如果未能解决你的问题,请参考以下文章

统计单词数

JSK-27321 统计单词数字符串

2011统计单词数

洛谷 P1308 统计单词数字符串+模拟

AC日记——统计单词数 openjudge 1.12 5

杭电2072 统计单词数