1. 程式人生 > >洛谷 - 統計單詞數

洛谷 - 統計單詞數

題目 otto names emp 第一次 編輯 math thml 文本

P1308 統計單詞數

題目描述

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

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

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

輸入輸出格式

輸入格式:

22行。

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

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

輸出格式:

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

輸入輸出樣例

輸入樣例#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 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     string w;    //單詞 
 7     string t;    //文章 
 8 
 9     getline(cin, w);
10     getline(cin, t);
11 
12     for(int i = 0; i < w.length(); i++)    //將單詞和文章中所有單詞轉換為小寫字母 
13     {
14         w[i] = tolower(w[i]);
15 } 16 17 for(int i = 0; i < t.length(); i++) 18 { 19 t[i] = tolower(t[i]); 20 } 21 22 int sum = 0; //記錄出現的總次數 23 int pos; //記錄單詞在文章第一次出現的位置 24 int i, j; //循環變量 25 26 // w: to 27 // t: wto hello to you tom 28 29 for(i = 0; i <= t.size() - w.size(); i++) //循環t串的0~(t-w) 30 { 31 for(j = 0; j < w.size(); ++j) //t的字符,分別對其對其後面的w的長度位做比較 32 { 33 if(t[i + j] != w[j]) //如果在w的長度之內有不相等的,直接跳出循環 34 { 35 break; 36 } 37 38 if(i > 0 && t[i-1] != ) //不在開頭的時候,如果它前面不是空格,就表示它不是單獨的單詞 39 { 40 break; 41 } 42 } 43 44 if(j == w.size() && (t[i + j] == || i+j == t.size())) //將w匹配完,並且下一個就是空格,或者i+j剛好到了t的最後(最後的單詞沒有空格) 45 { 46 sum++; 47 48 if(sum == 1) //記住第一次出現的位置 49 { 50 pos = i; 51 } 52 } 53 54 } 55 56 if(sum == 0) 57 { 58 cout << -1; 59 } 60 else 61 { 62 cout << sum << " " << pos; 63 } 64 65 return 0; 66 }

洛谷 - 統計單詞數