题目描述 Description
  一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 
  现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章
  中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
 输入输出格式 Input/output
输入格式:
  输入文件名为stat.in ,2 行。 
  第1 行为一个字符串,其中只含字母,表示给定单词; 
  第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式:
  输出文件名为stat.out 。 
  只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。
 输入输出样例 Sample input/output
样例测试点#1
输入样例:

【输入样例1】
To
to be or not to be is a question
【输入样例2】
to
Did the Ottoman Empire lose its power at that time

输出样例:

【输出样例1】
2 0
【输出样例2】
-1

说明 description
数据范围
1≤ 单词长度≤10。 
1≤ 文章长度≤1,000,000。 
noip2011普及组第2题
思路:循环至末尾,遇到空格,判断空格前的单词是否与要找的单词相符,是的话输出位置,否则没找到,输出-1。
代码①如下(本代码来自我的老师:http://www.cnblogs.com/huashanqingzhu/p/4051137.html):
 #include<stdio.h>
#include<string.h>
int main()
{
char s1[],s2[];
int f1;
long first=-,num=;//first:首次出现的下标。num:总共出现的次数
char ch;
int i;
int index=-;//表示当前扫描文章的下标
scanf("%s",s1);
getchar();//吸收回车符
for(i=;s1[i]!='\0';i++)
{
if(s1[i]>='A'&&s1[i]<='Z')//若是大写字母,则变为小写字母
s1[i]=s1[i]+;
}
f1=;//尚未开始输入文章当中的新单词
i=;//从文章输入的字符保存在s2数组当中的下标
while((ch=getchar())!=EOF)//没到结束
{
index++;
if(ch==' ')//空格
{
if(f1==)
{
continue;//跳出循环
}
else
{
s2[i]='\0';//给这里表上末尾
if(strcmp(s1,s2)==)//如果两个一样大
{
if(first==-)
first=index-strlen(s2);
num++;//出现过,num++
}
i=;
f1=;
}
}
else
{
f1=;
if(ch>='A'&&ch<='Z') ch=ch+;
s2[i]=ch;
i++;
}
}
if(num>)//出现过
printf("%d %d\n",num,first);
else printf("-1\n");//没出现过
return ;
}

代码②如下:

 #include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i,j,t=,tt=;
char s[],ss[];//文章,单词
freopen("stat.in","r",stdin);
freopen("stat.out","w",stdout);
gets(ss);
gets(s);
for(i=;i<=(strlen(s)-strlen(ss));i++)
{
for(j=;j<=strlen(ss)-;j++)
{
if(toupper(s[j+i])!=toupper(ss[j])) break;//不是一样的,game over!!
if(i>&&s[i-]!=' ') break;//一样的,但后面是空格,不一样,game over!!
}
if(j==strlen(ss)&&(s[j+i]==' '||j+i==strlen(s)))//找到了耶,记录之
{
t++;
if(t==)
{
tt=i;
}
}
}
if(t==) printf("-1\n");//没找到,输出-1
else printf("%d %d\n",t,tt);//找到了,输出单词位置
return ;
}
 

NOIP2011-普及组复赛-第二题-统计单词数的更多相关文章

  1. NOIP2005-普及组复赛-第二题-校门外的树

    题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  2. NOIP2014-普及组复赛-第二题-比例简化

    题目描述 Description 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为14 ...

  3. NOIP2010-普及组复赛-第二题-接水问题

    题目描述 Description 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1.  现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些 ...

  4. NOIP2012-普及组复赛-第二题-寻宝

    题目描述 Description 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下:藏宝楼共有 ...

  5. NOIP2001-普及组复赛-第二题-最大公约数和最小公倍数问题

    题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数条件:  1.P,A是正整数 ...

  6. 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)

    题目链接: https://vijos.org/p/1771 题目大意: 给定2N个人(N<=100 000)和其初始分数.能力值(能力两两不同),比赛M次(M<=50),每次PK都是按分 ...

  7. NOIP2002-普及组复赛-第二题-级数求和

    题目描述 Description 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. 现给出一个整数K(1<=k<=15),要求计算出一个 ...

  8. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  9. 洛谷 P1308 统计单词数【string类及其函数应用/STL】

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

随机推荐

  1. 加班计时App

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. extjs+amcharts生成3D柱状图和数据表格使用总结

    废话不多说,使用extjs+amcharts创建3d柱状图和数据表实例,如下: 1.首先定义一个数据模型 Ext.define("cacheHijack", { extend : ...

  3. POJ 3253 Fence Repair (优先队列)

    POJ 3253 Fence Repair (优先队列) Farmer John wants to repair a small length of the fence around the past ...

  4. AJAX在Struts2中使用

    前台页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  5. Python学习日志(一)

    1.os - Normal Method: os.name() : os.getcwd(): 给出当前的目录,python当前的工作目录 os.listdir(): 返回 os.remove():删除 ...

  6. QDataStream对QVector的序列化

    最近发现QDataStream这个好东东,序列化发送数据很方便,与大家分享一下. 客户端: line.h #ifndef LINE_H #define LINE_H #include <QStr ...

  7. python 学习 [day7]面向对象

    编程模式概念 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向对象的三大 ...

  8. Code Sign error: No code signing identities found: No valid signing identities

    Code Sign error: No code signing identities found: No valid signing identities 解决办法:如果证书可获取,最简办法就是把所 ...

  9. flume-hdfs sinks报错

    flume使用hdfs sinks时候报错:org.apache.flume.EventDeliveryException: java.lang.NullPointerException: Expec ...

  10. ACM常用模板

    数论: 中国剩余定理(互质与非互质通用版) ],r[]; int e_gcd(int a,int b,int &x,int &y) { ) { x=; y=; return a; } ...