打印输入中单词长度的直方图

 

打印输入中单词长度的直方图

#include <stdio.h>

 

#define MAXWORDLEN 10 //单Ì£¤词䨺的Ì?长¡è度¨¨从䨮1-10,ê?长¡è于®¨²10的Ì?都?当Ì¡À成¨¦一°?种?(ê¡§最Á?长¡è长¡è度¨¨)ê?

 

int main(void)

{

  int c;

  int inspace = 0;      //统ª3计?该?单Ì£¤词䨺长¡è度¨¨是º?否¤?结¨¢束º?

  long lengtharr[MAXWORDLEN + 1]=0;  //单Ì£¤词䨺的Ì?11种?长¡è度¨¨

  int wordlen = 0;

 

  int firstletter = 1;   //输º?入¨?的Ì?是º?/否¤?为a新?单Ì£¤词䨺的Ì?第̨²一°?个?字Á?符¤?

  long thisval = 0;

  long maxval = 0;       //已°?知a所¨´有®D单Ì£¤词䨺的Ì?最Á?大䨮个?数ºy

  int thisidx = 0;       //该?长¡è度¨¨单Ì£¤词䨺的Ì?个?数ºy

  int done = 0;

 

   //统ª3计?直¡À方¤?图ª?

  while(done == 0)

  {

    c = getchar();

 

    if(c == ' ' || c == '\t' || c == '\n' || c == EOF)  //遇®?到Ì?这a四?种?符¤?号?,ê?单Ì£¤词䨺停ª¡ê止1计?算?长¡è度¨¨

    {

      if(inspace == 0)

      {

        firstletter = 0;        

        inspace = 1;    

 

        if(wordlen <= MAXWORDLEN)   //单Ì£¤词䨺的Ì?长¡è度¨¨不?到Ì?界?限T时º¡À

        {

          if(wordlen > 0)

          {

            thisval = ++lengtharr[wordlen - 1];

            if(thisval > maxval)

            {

              maxval = thisval;

            }

          }

        }

        else       //单Ì£¤词䨺的Ì?长¡è度¨¨超?出?界?限T时º¡À

        {

          thisval = ++lengtharr[MAXWORDLEN];

          if(thisval > maxval)

          {

            maxval = thisval;

          }

        }

      }

      if(c == EOF)  //退ª?出?循-环¡¤

      {

        done = 1;

      }

    }

    else                                                                                                                    //输º?入¨?单Ì£¤词䨺不?是º?上¦?述º?四?种?符¤?号?,ê?需¨¨要°a计?算?单Ì£¤词䨺的Ì?长¡è度¨¨

    {                                                                                                                                  //

      if(inspace == 1 || firstletter == 1)                                           //

      {                                                                                                                              //

        wordlen = 0;                                                                                            //

        firstletter = 0;                                                                                 //

        inspace = 0;                                                                                             //

      }                                                                                                                              //

      ++wordlen;                                                                                                  //记?录?的Ì?单Ì£¤词䨺长¡è度¨¨

    }                                                                                                                                  //

  }

 

  //打䨰印®?直¡À方¤?图ª?

  for(thisval = maxval; thisval > 0; thisval--) //从䨮出?现?次ä?数ºy最Á?多¨¤的Ì?开a始º?打䨰

  {

    printf("%4d  | ", thisval);

    for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)

    {

                   //某3长¡è度¨¨单Ì£¤词䨺的Ì?个?数ºy大䨮于®¨²该?数ºy目?时º¡À,ê?打䨰印®?*,ê?否¤?则¨°打䨰印®?空?格?

      if(lengtharr[thisidx] >= thisval)

      {

        printf("*  ");

      }

      else

      {

        printf("   ");

      }

    }

    printf("\n");

  }

  printf("      +");

  for(thisidx = 0; thisidx <= MAXWORDLEN; thisidx++)

  {

    printf("---");

  }

  printf("\n       ");

  for(thisidx = 0; thisidx < MAXWORDLEN; thisidx++)

  {

    printf("%2d ", thisidx + 1);

  }

  printf(">%d\n", MAXWORDLEN);

 

  return 0;

}

 

注意:

1,  先判断什么,怎样开始判断新的单词是否开始,单词是否已经结束

2,  Inspace和 firstletter的妙用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值