noip2011普及组——统计单词数

简介: 统计单词数 时间限制:1 s 内存限制:128MB 【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。

统计单词数

时间限制:1 s

内存限制:128MB

【问题描述】
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位
置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章
中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,
即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),
如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

【输入】
输入文件名为stat.in,2行。
第1行为一个字符串,其中只含字母,表示给定单词;
第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【输出】
输出文件名为stat.out。
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,
分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字
母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。

输入输出样例1

输入:

To
to be or not to be is a question

输出:

2 0 

【输入输出样例1说明】
输出结果表示给定的单词To在文章中出现两次,第一次出现的位置为0。

输入输出样例2

输入:

to
Did the Ottoman Empire lose its power at that time

输出:

-1 

【输入输出样例2说明】
表示给定的单词to在文章中没有出现,输出整数-1。
【数据范围】
1≤单词长度≤10。
1≤文章长度≤1,000,000。

 1 #include<stdio.h>
 2 #include<string.h> 
 3 int main()
 4 {
 5     char s1[100],s2[1000];
 6     int f1;
 7     long first=-1,num=0;//first:首次出现的下标。num:总共出现的次数 
 8     char ch;
 9     int i;
10     int index=-1;//表示当前扫描文章的下标
11     
12     freopen("stat2.in","r",stdin);
13     freopen("stat2.txt","w",stdout);
14     
15     scanf("%s",s1);
16     getchar();//吸收回车符 
17     for(i=0;s1[i]!='\0';i++)
18     {
19         if(s1[i]>='A'&&s1[i]<='Z')//若是大写字母,则变为小写字母 
20             s1[i]=s1[i]+32;
21     }
22     
23     f1=0;//尚未开始输入文章当中的新单词 
24     i=0;//从文章输入的字符保存在s2数组当中的下标
25     while((ch=getchar())!=EOF)
26     {
27         index++;
28         if(ch==' ')
29         {
30             if(f1==0) { continue; }
31             else
32             {
33                 s2[i]='\0';
34                 if(strcmp(s1,s2)==0)
35                 {
36                     if(first==-1)
37                         first=index-strlen(s2);
38                     num++;
39                 }
40                 i=0;
41                 f1=0;
42             }
43         }
44         else
45         {
46             f1=1;
47             if(ch>='A'&&ch<='Z') ch=ch+32;
48             s2[i]=ch;
49             i++;
50         }
51     }
52     if(num>0)
53         printf("%d %d\n",num,first);
54     else printf("-1\n");
55     return 0;
56 }
View Code

 

相关文章
|
4月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
2月前
【洛谷】P1308 [NOIP2011 普及组] 统计单词数
然后要被查找的b字符串,可能会出现第二个样例中的情况,也就是字符串a是to,而字符串b的Ottoman,这样是不符合题意的。为了 解决这个问题,我们将字符串a首尾都加一个空格,同时将字符串b首尾都加一个空格(这里是为了让字符串b的首单词和尾单词前后均有空格)为了能持续找字符串b中的所有字符串a,我们用一个while循环,如果能找到,就每次从能找到的位置的下一个位置(也就是能找到的位置下标+1)开始找,并及时更新位置,同时计数。因为不区分大小写,所以可以将两个字符串a,b都转为小写(也可以都转为大写)。
66 10
【洛谷】P1308 [NOIP2011 普及组] 统计单词数
|
3月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
33 0
|
运维
【运维杂谈】统计文件中出现的单词数和字母数
【运维杂谈】统计文件中出现的单词数和字母数
86 0
回溯与搜索 五 数的划分(NOIP2001)
回溯与搜索 五 数的划分(NOIP2001)
P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)
P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)
67 0
|
机器学习/深度学习 人工智能
P1012 [NOIP1998 提高组] 拼数(比较特殊的排序问题)
P1012 [NOIP1998 提高组] 拼数(比较特殊的排序问题)
68 0
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
48 0
|
机器学习/深度学习
P1067 [NOIP2009 普及组] 多项式输出(模拟输出细节)
P1067 [NOIP2009 普及组] 多项式输出(模拟输出细节)
53 0
【2012NOIP普及组】T1. 质因数分解 试题解析
【2012NOIP普及组】T1. 质因数分解 试题解析