題目內容
略
輸入說明:
第一筆資料為你接下來會收到幾筆字串的資料,接下來都剩下幾筆都是有英文組的句子。輸出說明:
找出字母出現頻率,由頻率大的輸出到小的,如果頻率相同,則由字母小的先輸出。
Sample Input
3
This is a test.
Count me 1 2 3 4 5.
Wow!!!! Is this question easy?
Sample Output
S 7
T 6
I 5
E 4
O 3
A 2
H 2
N 2
U 2
W 2
C 1
M 1
Q 1
Y 1
需要除了標準函式庫的stdio以外,還需要String來幫助你來算字串長度,方便一個一個把字從句子擷取出來統計。
(以上資料來源:大學程式能力檢定Collegiate Programming Examination(CPE))
程式碼解答
#include <Stdio.h>
#include <String.h>
int main()
{
int n, f, max;
char line[1000], c;
int count[127]={0};
scanf("%d\n", &n);
max=0;
for(int i=0; i<n; i++)
{
gets(line);
//如果要為了考試可以使用方便記得gets來使用,但如果以後出社會或其他地方建議使用fget因為會有溢位跟編譯器的問題
for(int j=0; j<strlen(line); j++)
{
c=line[j];
if(c>='a' && c<='z') c-=32;
//由於輸入的資料有大寫小寫,而最後輸出都要大寫,所以由ascii來看得知英文字只要剪32就是打寫對應的碼了
if(c>='A' && c<='Z') ++count[c];
//統計英文字母
}
for(c='A'; c<='Z'; c++)//找出出現最多次數
{
if(count[c]>max) max=count[c];
}
}
for(f=max; f>0; f--)
{
for(c='A'; c<='Z'; c++)
{
if(count[c]==f) printf("%c %d\n", c, f);
}
}
}