代碼如下:
- #include <iostream>
- using namespace std;
- int main() {
- char ch;
- char s_letter[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
- char b_letter[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
- int num[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- for (int i = 1; i <= 10000; i++) {
- ch = cin.get();
- if(ch == '#')break;
- for(int j=0;j<=25;j++)
- {
- if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;
- }
- }
- for(int i=0;i<=25;i++)
- {
- cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
- }
- }
(拓展)統計26個字母在一篇新聞中各自出現的頻率。
代碼如下:
- #include <iostream>
- using namespace std;
- int main() {
- char ch;
- char s_letter[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
- char b_letter[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
- int num[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- float f_num[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- int Sum;
- for (int i = 1; i <= 10000; i++) {
- ch = cin.get();
- if(ch == '#')break;
- for(int j=0;j<=25;j++)
- {
- if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;
- }
- }
- for(int i=0;i<=25;i++)
- {
- cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
- }
- for(int i=0;i<=25;i++)
- {
- Sum+=num[i]; //計算字母總數
- }
- for(int i=0;i<=25;i++)
- {
- f_num[i]=num[i]*(1.0)/Sum * 100; //計算字母出現的頻率*100
- }
- for(int i=0;i<=25;i++)
- {
- cout<<s_letter[i]<<"出現的頻率為";
- printf("%.3f",f_num[i]);//保留三位小數
- cout<<"%"<<endl;//輸出頻率為百分之幾
- }
}
(拓展)英文新聞由文件輸入,統計其中a-z這26個字母各出現的次數和總字符個數。(不區分大小寫)
- #include <iostream>
- #include <fstream>
- #include <cassert>
- #include <string>
- #include<algorithm>
- #include<iomanip>
- using namespace std;
- int main()
- { char s_letter[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
- char b_letter[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
- int num[26]={0};
- float f_num[26]={0};
- ifstream infile;
- int Sum=0;
- infile.open("C:\\Users\\yyz22\\Desktop\\news1.txt");//打開文件txt 根據自身需求更改絕對路徑 注意是雙反斜杠\\
- char ch;
- infile >> noskipws;//不跳過空格和換行
- while (!infile.eof())//循環直到文本末尾結束
- {
- infile>>ch;
- cout<<ch;
- for(int j=0;j<=25;j++)
- {
- if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;//統計字母出現個數
- }
- }
- infile.close();
- cout<<endl;
- for(int i=0;i<=25;i++)
- {
- cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
- Sum= Sum + num[i]; //計算字母總數
- }
- cout<<"總數:"<<Sum<<"\n";
- for(int i=0;i<=25;i++)
- {
- f_num[i]=float(num[i])/Sum; //計算字母出現的頻率
- }
- for(int i=0;i<=25;i++)
- {
- cout<<s_letter[i]<<"出現的頻率為";
- cout<<fixed<<setprecision(6)<<f_num[i]*100;
- cout<<"%"<<endl;//輸出頻率為百分之幾
- }
- }
總結:for循環處理ch=cin.get(); 解決了enter結束輸入流的問題。分別用if判斷是什么字符或者#結束。
--yyz 1806
2018.10.24