1. 程式人生 > >(第二題)統計單詞數 【洛谷】P1308

(第二題)統計單詞數 【洛谷】P1308

題目描述

一般的文字編輯器都有查詢單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。

現在,請你程式設計實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即給定單詞必須與文章

中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例1 ),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2 )。

輸入輸出格式

輸入格式: 共22行。

第11行為一個字串,其中只含字母,表示給定單詞;

第22行為一個字串,其中只可能包含字母和空格,表示給定的文章。

輸出格式: 一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從00 開始);如果單詞在文章中沒有出現,則直接輸出一個整數-1−1。

輸入輸出樣例

輸入樣例#1: To to be or not to be is a question 輸出樣例#1: 2 0

輸入樣例#2: to Did the Ottoman Empire lose its power at that time 輸出樣例#2: -1 說明

資料範圍

1≤ 1≤單詞長度≤10≤10。

1≤ 1≤文章長度≤1,000,000≤1,000,000。

noip2011普及組第2題

分析

模擬

程式碼

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
string to_big(string);
int main()
{
	getline(cin,s1);
	getline(cin,s2);
	s1=to_big(s1);
	s2=to_big(s2);
	int wz=-1,cs=0;
	for(int i=0;i<s2.size()-s1.size()+1;i++)
	 if(s2[i]==s1[0]&&s2.substr(i,s1.size())==s1&&s2[i+s1.size()]==' '&&(s2[i-1]<'A'||s2[i-1]>'Z'))
	 {
		cs++;
		if(wz==-1) wz=i;
	 }
	if(wz==-1) cout<<wz<<endl;
	else cout<<cs<<" "<<wz<<endl;
}
string to_big(string s)
{
	for(int i=0;i<s.size();i++)
	 if(s[i]>='a'&&s[i]<='z')
	  s[i]+='A'-'a';
	return s;
}