打印输入中单词长度的直方图
#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的妙用