国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

統(tǒng)計(jì)輸入字符各個(gè)字母出現(xiàn)頻率的解題思路

2020-01-26 15:00:01
字體:
供稿:網(wǎng)友

本文跟大家分享的是編寫一個(gè)程序,能夠計(jì)算輸入字符各個(gè)字母出現(xiàn)的頻率,具體如下

 先跟大家展示一下最終結(jié)果:

剛剛接手題目的時(shí)候,我想得很復(fù)雜,因?yàn)?6個(gè)字母中有大小寫嘛,小寫a~z,大寫A~Z

但是,無論是大寫還是小寫,字母都只有26個(gè),在此,當(dāng)輸入大寫字母的時(shí)候,我們就將其轉(zhuǎn)換為小寫就ok啦

大寫字母轉(zhuǎn)換為小寫字母,有個(gè)很方便的函數(shù)tolow(),在ctype.h中,詳情文章末。

看過前一篇文章《c語言:計(jì)算輸入字符個(gè)數(shù)》中使用數(shù)組統(tǒng)計(jì)單詞長(zhǎng)度的方法,在統(tǒng)計(jì)字母的個(gè)數(shù)的時(shí)候,依舊可以,只不過有些"小技巧"。

大小寫轉(zhuǎn)換與計(jì)算

if(isalpha(c)) /*詳情見文末*/{c = tolower(c); //大寫轉(zhuǎn)換為小寫++char_count[c-'a'];}

通過上面的代碼將26個(gè)字母出現(xiàn)的頻率統(tǒng)計(jì)后(都存在數(shù)組中),再來打印直方圖,何為直方圖,就是那張圖拉,向上看。

由于要畫直方圖,所以用用到兩個(gè)for循環(huán)語句,通過觀察可以知道,直方圖的行數(shù)由max決定。

max如何求呢,看如下代碼:

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

現(xiàn)在max也知道了,來畫出直方圖吧:

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

現(xiàn)在一切都o(jì)k啦,還差一個(gè)橫坐標(biāo),不然我們咋知道每一列代表的是哪一個(gè)字母呢:

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

完整代碼:

#include <stdio.h> #include <ctype.h> main() {   int x; //數(shù)組下標(biāo)變量,詳情看代碼   int max;  //出現(xiàn)頻率最高的字母   int char_count[26]; //26個(gè)字母出現(xiàn)字?jǐn)?shù)的統(tǒng)計(jì)   char c;  /*將數(shù)組初始化,因?yàn)槲覀冞€沒有輸入嘛,所以a~z都為0啦*/   for( x= 0; x < 26; x++)   {     char_count[x] = 0;   }    while((c = getchar()) != EOF)   {     if(isalpha(c)) /*詳情見文末*/     {       c = tolower(c); //大寫轉(zhuǎn)換為小寫       ++char_count[c-'a'];     }   }    max = 0;  //初始化  /*找出出現(xiàn)頻率最高的字母*/   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');   } /*打印下標(biāo),即abcdefghijklml....*/   for(x = 0; x < 26; x++)   {     putchar('a'+x);   }   return 0;   }

ps:

以上就是計(jì)算輸入字符各個(gè)字母出現(xiàn)頻率的整體解題思路,希望對(duì)大家的學(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 泰安市| 日喀则市| 阿拉尔市| 上饶市| 郸城县| 天门市| 新化县| 龙门县| 孟津县| 凤山县| 固原市| 吴川市| 白城市| 黔西| 阳春市| 涞水县| 华阴市| 余江县| 三江| 尉氏县| 安福县| 高要市| 西林县| 新龙县| 海兴县| 宁武县| 六安市| 广水市| 尚志市| 辉南县| 兴安盟| 二手房| 凤翔县| 宁明县| 阜宁县| 纳雍县| 勃利县| 邵阳市| 汉寿县| 汉寿县| 富宁县|