編寫程序實現功能:數據文件story.txt是一篇英文小故事,請先統計其中26個字母的出現次數。
要求一:再根據用戶要求,輸出某個字母的出現次數,直到用戶輸入#為止。
要求二:請輸出出現頻率最高的三個字母和它們的出現次數。
#include
#include
#include
int main()
{
int alpha[26]={0}; //用於計數26個字母出現的次數
FILE *text; //FILE 指針
char ch;
if((text=fopen("Story.txt","r"))== NULL){
printf("File open error!");
exit(0);
}//如果沒有文件則提示錯誤
while((ch=fgetc(text))!=EOF){
ch = tolower(ch);
if(ch>='a'&&ch<='z'){
alpha[ch-'a']++;
}
}//將每個字母出現的次數存放到lpha數組中
fclose(text);
int isSelected[26] ={0};//用於標記是否已經被選為前三個
int i;
int FIndex=0,SIndex=0,TIndex=0;//分別記錄前三個字母的下標
int MaxNum = 0;
for(i=0;i<26;i++){
if(!isSelected[i]){
if(alpha[i]>MaxNum){
FIndex = i;
MaxNum = alpha[i];
}
}
}
isSelected[FIndex] = 1; //在未被選擇的字母中比較出當前次數最多的,則為第一個
MaxNum = 0;
for(i=0;i<26;i++){
if(!isSelected[i]){
if(alpha[i]>MaxNum){
SIndex = i;
MaxNum = alpha[i];
}
}
}
isSelected[SIndex] = 1;//在未被選擇的字母中比較出當前次數最多的,則為第二個
MaxNum = 0;
for(i=0;i<26;i++){
if(!isSelected[i]){
if(alpha[i]>MaxNum){
TIndex = i;
MaxNum = alpha[i];
}
}
}
isSelected[TIndex] = 1;//在未被選擇的字母中比較出當前次數最多的,則為第三個
printf("前三個字母:%c %c %c\n出現的次數:%d %d %d\n\n",'a'+FIndex,'a'+SIndex,'a'+TIndex,
alpha[FIndex],alpha[SIndex],alpha[TIndex]);
printf("Enter a Letter to check its count(end with input #):\n\n");
while((ch=getchar())!='#'){
ch = tolower(ch);
if(ch<'a'|| ch>'z')printf("Enter a letter !\n");
else {
printf("time(s):%d\n",alpha[ch-'a']);
}
getchar();
}//判斷是否為‘#’,如果不是則打印相應的次數
}