1. 程式人生 > >zcmu--1750: 統計單詞數(字串處理)

zcmu--1750: 統計單詞數(字串處理)

1750: 統計單詞數

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 361  Solved: 66
[Submit][Status][Web Board]

Description

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

現在,請你程式設計實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即單詞必須與文章中某一獨立殘次在不區分大小寫的情況下完全相同(參見樣例1),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2)。

Input

輸入檔案共2行。

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

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

Output

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

Sample Input

To

to be or not to be is a question

to

Did the Ottoman Empire lose its power at that time

Sample Output

2  0

-1

HINT

1<=單詞長度<=10。

1<=文章長度<=10,000,000。

NOIP2011 普及組 stat

【分析】find函式的應用,注意是多組輸入,不然會WA的

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s,word;
    while(getline(cin,word))
    {	
		int t=0;
    	getline(cin,s);
	    for(int j=0;j<=word.size();j++)
	        word[j]=tolower(word[j]);
	    for(int j=0;j<=s.size();j++)
	        s[j]=tolower(s[j]);
	    word=' '+word+' ';
	    s=' '+s+' ';
	    int pos=-1;
	    int wpos=0,flag=1;
	    if(s.find(word)==string::npos){
	        cout<<"-1\n";
	        flag=0;
	        }
	    if(flag)
	    {
	    	 wpos=s.find(word);
		    while(s.find(word,pos+1)!=string::npos){
		        pos=s.find(word,pos+1);
		        t++;
		    }
		    cout<<t<<" "<<wpos<<endl;
		}
	   
	}
    
    return 0;
}