演算法學習之路|字元統計

kissjz發表於2018-02-26

請編寫程式,找出一段給定文字中出現最頻繁的那個英文字母。

輸入格式

輸入在一行中給出一個長度不超過1000的字串。字串由ASCII碼錶中任意可見字元及空格組成,至少包含1個英文字母,以回車結束(回車不算在內)。

輸出格式

在一行中輸出出現頻率最高的那個英文字母及其出現次數,其間以空格分隔。如果有並列,則輸出按字母序最小的那個字母。統計時不區分大小寫,輸出小寫字母。

輸入樣例:
This is a simple TEST. There ARE numbers and other symbols 1&2&3………..
輸出樣例:
e 7
解題思路

利用map中first存字元,second存字元的個數

然後遍歷map,找出字元最多的個數max。

再次遍歷map,輸出字元個數==max的字元。

#include<iostream>
#include<map>
#include<cctype>
#include<stdio.h>
using namespace std;

int main(){
    map<char,int>s,ans;
    char ch;
    while((ch=getchar())!=`
`){
        ch=tolower(ch);
        if(ch>=`a`&&ch<=`z`){
            s[ch]++;
        }
    }
    int max=0;
    for(map<char,int>::iterator i=s.begin();i!=s.end();i++){
        if(i->second>max){
            max=i->second;
        }
    }
    for(map<char,int>::iterator i=s.begin();i!=s.end();i++){
        if(i->second==max)
            ans[i->first]=i->second;
    }
    cout<<ans.begin()->first<<" "<<ans.begin()->second;
}


相關文章