洛谷 - 統計單詞數
阿新 • • 發佈:2019-03-23
題目 otto names emp 第一次 編輯 math thml 文本
輸出樣例#2: 復制
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
-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 }
洛谷 - 統計單詞數