【模拟】[NOIP2011普及组]统计单词数

题目:[NOIP2011普及组]统计单词数 rqnoj661

题目描述

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

输入格式

第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

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

样例输入

样例输出

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

 

Pascal Code

program rqnoj661;

var
  w,s:ansistring;
  num:longint;
  k:array[0..10000000] of longint;

procedure init;
begin
  assign(input,'rqnoj661.in');
  assign(output,'rqnoj661.out');
  reset(input);
  rewrite(output);
end;

procedure outit;
begin
  close(input);
  close(output);
  halt;
end;

procedure xiao(var s:ansistring);
var
  i:longint;
begin
  for i:=1 to length(s) do
  begin
    if s[i] in ['a'..'z'] then continue;
    if s[i] in ['A'..'Z'] then
    begin
      s[i]:=chr(ord(s[i])+32);
    end;
  end;
end;

procedure readdata;
begin
  readln(w);
  readln(s);
  xiao(w);//全部转换为小写
  xiao(s);
end;

procedure main;
var
  a:ansistring;
  i:longint;
begin
  a:='';
  for i:=1 to length(s) do
  begin
    if s[i]=' ' then
    begin
      if a=w then
      begin
        inc(num);
        k[num]:=i-length(w);
      end;
      a:='';
      continue;
    end;
    a:=a+s[i];
  end;
  if num=0 then
  begin
    writeln(-1);
    outit;
  end;
  writeln(num,' ',k[1]-1);
end;

begin
  init;
  readdata;
  main;
  outit;
end.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值