[洛谷] P1308 統計單詞數
阿新 • • 發佈:2019-02-17
題目描述
一般的文字編輯器都有查詢單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。
現在,請你程式設計實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,不區分大小寫,但要求完全匹配,即給定單詞必須與文章
中的某一獨立單詞在不區分大小寫的情況下完全相同(參見樣例1 ),如果給定單詞僅是文章中某一單詞的一部分則不算匹配(參見樣例2 )。
輸入輸出格式
輸入格式:
輸入檔名為stat.in ,2 行。
第1 行為一個字串,其中只含字母,表示給定單詞;
第2 行為一個字串,其中只可能包含字母和空格,表示給定的文章。
輸出格式:
輸出檔名為stat.out 。
只有一行,如果在文章中找到給定單詞則輸出兩個整數,兩個整數之間用一個空格隔開,分別是單詞在文章中出現的次數和第一次出現的位置(即在文章中第一次出現時,單詞首字母在文章中的位置,位置從 0 開始);如果單詞在文章中沒有出現,則直接輸出一個整數-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≤ 單詞長度≤10。
1≤ 文章長度≤1,000,000。
noip2011普及組第2題
基礎的stl map容器操作
建立兩個容器
一個記錄是否出現與第一次出現位置
另一個記錄次數
#include <iostream> #include <map> #include <cstdio> using namespace std; int main() { map <string,int> words; map <string,int> times; int flag = 0; string text,mode,tmp = ""; cin>>mode; getchar(); getline(cin,text); for(int i=0;i<mode.length();i++) if(mode[i] >= 'A' && mode[i] <= 'Z') mode[i] = mode[i]+32; for(int i=0;i<text.length();i++) if(text[i] >= 'A' && text[i] <= 'Z') //統一小寫化 text[i] = text[i] + 32; //cout<<mode<<endl<<text<<endl; for(int i = 0;i <= text.length();i ++) { if(text[i] != ' '&& text[i] != '\0') { tmp += text[i]; } else if(text[i] == ' ' || text[i] == '\0') { //cout<<tmp<<flag<<endl; if(! words.count(tmp)) { words[tmp] = flag; times[tmp] ++; tmp = ""; flag = i + 1; } else { times[tmp] ++; tmp = ""; flag = i + 1; } } } if(! words.count(mode)) cout<<"-1"<<endl; else { cout<<times[mode]<<' '; cout<<words[mode]<<endl; } return 0; }