實驗:輸入一篇英文新聞,以“#”結束,統計其中a-z這26個字母各出現的次數和總字符個數。(不區分大小寫)


  代碼如下:

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. char ch;
  5. 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'};
  6. 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'};
  7. 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};
  8. for (int i = 1; i <= 10000; i++) {
  9. ch = cin.get();
  10. if(ch == '#')break;
  11. for(int j=0;j<=25;j++)
  12. {
  13. if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;
  14. }
  15. }
  16. for(int i=0;i<=25;i++)
  17. {
  18. cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
  19. }
  20. }

(拓展)統計26個字母在一篇新聞中各自出現的頻率。

代碼如下:

 

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. char ch;
  5. 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'};
  6. 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'};
  7. 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};
  8. 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};
  9. int Sum;
  10. for (int i = 1; i <= 10000; i++) {
  11. ch = cin.get();
  12. if(ch == '#')break;
  13. for(int j=0;j<=25;j++)
  14. {
  15. if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;
  16. }
  17. }
  18. for(int i=0;i<=25;i++)
  19. {
  20. cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
  21. }
  22. for(int i=0;i<=25;i++)
  23. {
  24. Sum+=num[i]; //計算字母總數
  25. }
  26. for(int i=0;i<=25;i++)
  27. {
  28. f_num[i]=num[i]*(1.0)/Sum * 100; //計算字母出現的頻率*100
  29. }
  30. for(int i=0;i<=25;i++)
  31. {
  32. cout<<s_letter[i]<<"出現的頻率為";
  33. printf("%.3f",f_num[i]);//保留三位小數
  34. cout<<"%"<<endl;//輸出頻率為百分之幾
  35. }

}

 

 

(拓展)英文新聞由文件輸入,統計其中a-z26個字母各出現的次數和總字符個數。(不區分大小寫)

 

  1. #include <iostream>
  2. #include <fstream>
  3. #include <cassert>
  4. #include <string>
  5. #include<algorithm>
  6. #include<iomanip>
  7. using namespace std;
  8. int main()
  9. { 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'};
  10. 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'};
  11. int num[26]={0};
  12. float f_num[26]={0};
  13. ifstream infile;
  14. int Sum=0;
  15. infile.open("C:\\Users\\yyz22\\Desktop\\news1.txt");//打開文件txt 根據自身需求更改絕對路徑 注意是雙反斜杠\\
  16. char ch;
  17. infile >> noskipws;//不跳過空格和換行
  18. while (!infile.eof())//循環直到文本末尾結束
  19. {
  20. infile>>ch;
  21. cout<<ch;
  22. for(int j=0;j<=25;j++)
  23. {
  24. if(ch==s_letter[j] || ch==b_letter[j]) num[j]++;//統計字母出現個數
  25. }
  26. }
  27. infile.close();
  28. cout<<endl;
  29. for(int i=0;i<=25;i++)
  30. {
  31. cout<<s_letter[i]<<"出現的個數為"<<num[i]<<endl;
  32. Sum= Sum + num[i]; //計算字母總數
  33. }
  34. cout<<"總數:"<<Sum<<"\n";
  35. for(int i=0;i<=25;i++)
  36. {
  37. f_num[i]=float(num[i])/Sum; //計算字母出現的頻率
  38. }
  39. for(int i=0;i<=25;i++)
  40. {
  41. cout<<s_letter[i]<<"出現的頻率為";
  42. cout<<fixed<<setprecision(6)<<f_num[i]*100;
  43. cout<<"%"<<endl;//輸出頻率為百分之幾
  44. }
  45. }

 

 

 

 

 

總結:for循環處理ch=cin.get(); 解決了enter結束輸入流的問題。分別用if判斷是什么字符或者#結束。

 --yyz 1806

2018.10.24

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM