欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言統(tǒng)計輸入字符各個字母出現(xiàn)頻率的解題思路

 更新時間:2022年07月20日 11:16:40   作者:fhefh  
這篇文章主要介紹了C語言統(tǒng)計輸入字符各個字母出現(xiàn)頻率的解題思路,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

剛剛接手題目的時候,我想得很復(fù)雜,因為26個字母中有大小寫嘛,小寫a~z,大寫A~Z

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

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

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

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

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

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

由于要畫直方圖,所以用用到兩個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啦,還差一個橫坐標(biāo),不然我們咋知道每一列代表的是哪一個字母呢:

/*打印下標(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個字母出現(xiàn)字?jǐn)?shù)的統(tǒng)計
   char c;
 
 /*將數(shù)組初始化,因為我們還沒有輸入嘛,所以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:

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

  • C++ sort排序之降序、升序使用總結(jié)

    C++ sort排序之降序、升序使用總結(jié)

    這篇文章主要介紹了C++ sort 排序(降序、升序)使用總結(jié),需要的朋友可以參考下
    2020-11-11
  • C++ Coroutine簡單學(xué)習(xí)教程

    C++ Coroutine簡單學(xué)習(xí)教程

    這篇文章主要為大家詳細(xì)介紹了C++ Coroutine的簡單學(xué)習(xí)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C++IO流之fstream,?stringstream使用小結(jié)

    C++IO流之fstream,?stringstream使用小結(jié)

    C語言中常用的輸入輸出函數(shù)有如下幾種:前者是格式化標(biāo)準(zhǔn)輸入輸出,后者是格式化文件輸入輸出,最后是格式化字符串輸入輸出,這篇文章主要介紹了C++IO流:fstream,?stringstream總結(jié),需要的朋友可以參考下
    2022-04-04
  • C++實現(xiàn)的一個可以寫遞歸lambda的Y函數(shù)

    C++實現(xiàn)的一個可以寫遞歸lambda的Y函數(shù)

    這篇文章主要介紹了C++實現(xiàn)的一個可以寫遞歸lambda的Y函數(shù),在Y函數(shù)的幫助,這個lambda表達(dá)是可以成功看到自己,然后遞歸調(diào)用的,需要的朋友可以參考下
    2014-07-07
  • VC++角色游戲中的人物初始化模塊代碼實例

    VC++角色游戲中的人物初始化模塊代碼實例

    這篇文章主要介紹了VC++角色游戲中的人物初始化模塊,對大家學(xué)習(xí)VC++有一定的幫助,需要的朋友可以參考下
    2014-08-08
  • C++輕量級界面開發(fā)框架ImGUI介紹小結(jié)

    C++輕量級界面開發(fā)框架ImGUI介紹小結(jié)

    如果從事過C++?Windows客戶端開發(fā),大家對MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個超級輕量級的C++開源跨平臺圖形界面框架ImGUI,感興趣的可以了解一下
    2021-11-11
  • C語言遞歸操作用法總結(jié)

    C語言遞歸操作用法總結(jié)

    這篇文章主要介紹了C語言遞歸操作用法,結(jié)合實例形式總結(jié)分析了C語言遞歸操作的原理、實現(xiàn)技巧與相關(guān)應(yīng)用,需要的朋友可以參考下
    2016-02-02
  • C++基于socket編程實現(xiàn)聊天室功能

    C++基于socket編程實現(xiàn)聊天室功能

    這篇文章主要介紹了C++基于socket編程實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 使用C語言實現(xiàn)12種排序方法

    使用C語言實現(xiàn)12種排序方法

    這篇文章主要介紹了用C語言完整實現(xiàn)12種排序方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 最新評論