程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 統計輸出字符各個字母湧現頻率的解題思緒

統計輸出字符各個字母湧現頻率的解題思緒

編輯:關於C++

統計輸出字符各個字母湧現頻率的解題思緒。本站提示廣大學習愛好者:(統計輸出字符各個字母湧現頻率的解題思緒)文章只能為提供參考,不一定能成為您想要的結果。以下是統計輸出字符各個字母湧現頻率的解題思緒正文


本文跟年夜家分享的是編寫一個法式,可以或許盤算輸出字符各個字母湧現的頻率,詳細以下

 先跟年夜家展現一下終究成果:

方才接辦標題的時刻,我想得很龐雜,由於26個字母中有年夜小寫嘛,小寫a~z,年夜寫A~Z

然則,不管是年夜寫照樣小寫,字母都只要26個,在此,當輸出年夜寫字母的時刻,我們就將其轉換為小寫就ok啦

年夜寫字母轉換為小寫字母,有個很便利的函數tolow(),在ctype.h中,概況文章末。

看過前一篇文章《c說話:盤算輸出字符個數》中應用數組統計單詞長度的辦法,在統計字母的個數的時刻,照舊可以,只不外有些"小技能"。

年夜小寫轉換與盤算

if(isalpha(c)) /*概況見文末*/
{
c = tolower(c); //年夜寫轉換為小寫
++char_count[c-'a'];
}

經由過程下面的代碼將26個字母湧現的頻率統計後(都存在數組中),再來打印直方圖,作甚直方圖,就是那張圖拉,向上看。

因為要畫直方圖,所以用用到兩個for輪回語句,經由過程不雅察可以曉得,直方圖的行數由max決議。

max若何求呢,看以下代碼:

max = 0;  //初始化

/*找出湧現頻率最高的字母*/
  for(x = 0; x < 26; x++)
  {
    if(char_count[x] > max)
    {
      max = char_count[x];
      printf("max is %d", max);
    }
  }

如今max也曉得了,來畫出直方圖吧:

/*打印直方圖*/
  for(; max > 0; max--)
  {
    for(x = 0; x < 26; x++)
    {
      if(char_count[x] >= max)
      {
        putchar('x');
      }
      else
        putchar('');
    }
    putchar('\n');
  }

如今一切都ok啦,還差一個橫坐標,否則我們咋曉得每列代表的是哪個字母呢:

/*打印下標,即abcdefghijklml....*/
  for(x = 0; x < 26; x++)
  {
    putchar('a'+x);
  }

完全代碼:

#include <stdio.h>
 #include <ctype.h>

 main()
 {
   int x; //數組下標變量,概況看代碼
   int max;  //湧現頻率最高的字母
   int char_count[26]; //26個字母湧現字數的統計
   char c;
 
 /*將數組初始化,由於我們還沒有輸出嘛,所以a~z都為0啦*/
   for( x= 0; x < 26; x++)
   {
     char_count[x] = 0;
   }
 
   while((c = getchar()) != EOF)
   {
     if(isalpha(c)) /*概況見文末*/
     {
       c = tolower(c); //年夜寫轉換為小寫
       ++char_count[c-'a'];
     }
   }
 
   max = 0;  //初始化
 
 /*找出湧現頻率最高的字母*/
   for(x = 0; x < 26; x++)
   {
     if(char_count[x] > max)
     {
       max = char_count[x];
       printf("max is %d", max);
     }
   }
 
 /*打印直方圖*/
   for(; max > 0; max--)
   {
     for(x = 0; x < 26; x++)
     {
       if(char_count[x] >= max)
       {
         putchar('x');
       }
       else
         putchar('');
     }
     putchar('\n');
   }
 /*打印下標,即abcdefghijklml....*/
   for(x = 0; x < 26; x++)
   {
     putchar('a'+x);
   }
   return 0;
 
 
 }

ps:

以上就是盤算輸出字符各個字母湧現頻率的全體解題思緒,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved