1. 程式人生 > >40 P1308 統計單詞數(洛谷)

40 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<stdio.h>
#include<string.h>
char s[15],txt[1000005]; 
int main()
{
	gets(s);
	gets(txt);
	int pos = -1,i,j,cnt = 0,flg;
	int len1 = strlen(s);
	int len2 = strlen(txt);
	for (i=0;i<len1;i++)
		if ('A'<=s[i] && s[i]<='Z')
			s[i] = s[i] + 32;
	for (i=0;i<len2;i++)
		if ('A'<=txt[i] && txt[i]<='Z')
			txt[i] = txt[i] + 32;
	for (i=0;i<len2;i++)
	{
		if ((i==0 || txt[i-1]==' ')&& s[0]==txt[i])
		{
			for (flg=i,j=0;j<len1;j++,i++)
				if (s[j]!=txt[i]) break;
			if (len1==j && (txt[i]==' ' || txt[i]=='\0'))
			{
				cnt++;
				if (cnt==1)
					pos = flg;
			}	
		}
	}
	if (cnt>0)
		printf("%d %d\n",cnt,pos);
	else
		printf("%d\n",pos);
	return 0;
}