1. 程式人生 > >P1308 統計單詞數

P1308 統計單詞數

題目描述


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


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


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


輸入輸出格式


輸入格式:
輸入檔名為stat.in ,2 行。


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


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


輸出格式:
輸出檔名為stat.out 。


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


輸入輸出樣例


輸入樣例#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:
【輸出樣例1】 
2 0
【輸出樣例2】 
-1
說明


資料範圍


1≤ 單詞長度≤10。


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


noip2011普及組第2題

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    fstream file;
    file.open("in.txt",ios::in);
    string s1,s2;
    getline(file,s1);
    getline(file,s2);

    int i,j;
    for(i=0; i<s1.length(); ++i)
    {
        if(s1[i]>='A' && s1[i]<='Z')
        {
            s1[i]=s1[i]+'a'-'A';
        }
    }

    for(i=0; i<s2.length(); ++i)
    {
        if(s2[i]>='A' && s2[i]<='Z')
        {
            s2[i]=s2[i]+'a'-'A';
        }
    }

    int counter=0;
    int first=-1;
    for(i=0; i<s2.length()-s1.length(); ++i)
    {
        for(j=0; j<s1.length(); ++j)
        {
            if(s2[i+j]!=s1[j])
            {
                break;
            }
            if(j==s1.length()-1)
            {
                if(first==-1)
                {
                    first=i;
                }
                counter++;
            }
        }
    }
    if(counter!=0)
    {
        cout<<counter<<" "<<first<<endl;
    }
    else
    {
        cout<<first<<endl;
    }
    return 0;
}