1071 Speech Patterns
阿新 • • 發佈:2018-08-30
小寫字母 tag pan substr dig div 編碼 是否 利用
題意:給出一個字符串,找出詞頻最高的單詞和相應的詞頻。(這個就是我之前做的一個項目的一個函數啊,哈哈哈)
思路:利用map定義字典map<string,int> dict。主要是字符串的截取,這裏用上了幾個比較方便的函數,總結如下:
幾個有助於節省編碼時間的字符串處理函數(在頭文件<ctype.h>或<cctype>下)
- isalnum 判斷字符是否為字母(含大小寫)或數字
- isalpha 判斷字符是否為字母(含大小寫)
- islower 判斷字符是否為小寫字母
- isupper 判斷字符是否為大寫字母
- isdigit 判斷字符是否為數字
- tolower 把大寫字母轉換成小寫字母
- toupper 把小寫字母轉換成大寫字母
代碼:
#include <iostream> #include <cctype>//isalnum(),tolower() #include <string> #include <map> #include <fstream> using namespace std; int main() { //ifstream cin("pat.txt"); string str; getline(cin,str); int len=str.size(); for(int i=0;i<len;i++) str[i]=tolower(str[i]); map<string,int> dict;//定義字典 int low=0; while(low<len){ int i=low; while(i<len && isalnum(str[i])) i++; if(i>low){ string word=str.substr(low,i-low); // if(dict.find(word)==dict.end())//這幾句寫不寫都沒關系// dict.insert(make_pair(word,1)); // else dict[word]++; } low=i+1; } string ans; int maxFreq=0; for(auto it:dict){ if(it.second>maxFreq){ ans=it.first; maxFreq=it.second; } } cout<<ans<<‘ ‘<<maxFreq; return 0; }
1071 Speech Patterns