1042. 字符统计(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
输入格式:
输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。
输出格式:
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
输入样例:This is a simple TEST. There ARE numbers and other symbols 1&2&3...........输出样例:
e 7
思路:申请一个容器,只将字母以大写形式存入容器,然后进行排序,再计算效率比一次次遍历容器较高
1 // 1042.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<string> 7 #include<vector> 8 #include <algorithm> 9 #include<cctype> 10 11 using namespace std; 12 13 int main() 14 { 15 int max = 0,sum=0; 16 string str; 17 char c,d; 18 vector<char> v; 19 20 getline(cin, str); 21 22 //只将字母存入数组中,且将大写转换为小写 23 for (int i = 0; str[i] != '\0'; i++) 24 if (isalpha(str[i]))//仅为字母才进入容器中 25 v.push_back(tolower(str[i]));//将大写转换为小写 26 27 sort(v.begin(),v.end());//将所有字母进行排序 28 29 vector<char>::iterator i, end = v.end(); 30 31 for (i = v.begin(), d = c = *i; i != end; d=*i,i++) 32 { 33 //当前元素与前一个元素不同时为真 34 if (d != (*i)) 35 { 36 if (sum > max) 37 { 38 c = d; 39 max = sum; 40 } 41 42 sum = 0; 43 } 44 45 sum++; 46 } 47 48 //如果所有的字母只有一种 49 if (d == *(v.begin())) 50 cout << *(v.begin()) << " " << sum; 51 else 52 cout << c << " " << max; 53 54 return 0; 55 }