码迷,mamicode.com
首页 > 编程语言 > 详细

C语言K&R习题系列——统计文档中每个单词所占字母个数,以直方图形式输出

时间:2015-03-15 07:13:54      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:c语言

原题:


Write a program to print a histogram of the lengths of words in its input. It is easy to draw the histogram with the bars horizontal; a vertical orientation is more challenging.

这也是我第一个过百行的代码(带注释,空格什么的)

主要分两个部分:输入和输出

#include < stdio.h >

#define MAXWORDLEN 10

main ( void )
{
	int c;
	int wordLen = 0;
	int thisIdx = 0;
	long lengthArray[MAXWORDLEN + 1];
	long thisVal = 0;
	long maxVal = 0;
	
	//initialize
	
	int inspace = 0;
	int firstLetter = 1;
	int done = 0;
	
	for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++ )
	{
		lengthArray[thisIdx] = 0;
	}
	
	while ( done == 0 )
	{
		c = getchar();
		
		if ( c == ‘ ‘ || c == ‘\n‘ || c == ‘\t‘ || c == EOF )
		{
			if ( inspace == 0 )
			{
				inspace = 1;
				firstLetter = 0;
				
				if( wordLen <= MAXWORDLEN )
				{
					thisVal = ++lengthArray[wordLen - 1];
					
					if	( thisVal > maxVal )
					{
						maxVal = thisVal;
					}
				}
				else
				{
					thisVal	= ++lengthArray[MAXWORDLEN];
					
					if	( thisVal > maxVal )
					{
						maxVal = thisVal;
					}
				}
			}
			if ( c	== EOF )
			{
				done = 1;
			}
		}
		else
		{
			if ( inspace == 1 || firstLetter == 1 )
			{
				wordLen	= 0;
				inspace	= 0;
				firstLetter = 0;
			}
			
			++wordLen;
		}
	}


之后为输出部分



for ( thisVal = maxVal; thisVal > 0; thisVal-- )
      {
            printf ( "%4d  |", thisVal );
            for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++ )
            {
                  if ( lengthArray[thisIdx] >= thisVal )
                  {
                        printf ( " * " );
                  }
                  else
                  {
                        printf ( "   " );
                  }
            }
                  printf ( "\n" );
      }
      
      printf ( "      |_" );
      for ( thisIdx = 0; thisIdx <= MAXWORDLEN; thisIdx++)
      {
            printf ( "___" );
      }
      printf ( "\n      " );
      for ( thisIdx = 0; thisIdx < MAXWORDLEN; thisIdx++ )
      {
            printf ( "%3d", thisIdx + 1 );
      }
      printf ( "  >\n" );
      for ( thisIdx = 0; thisIdx < MAXWORDLEN + 2; thisIdx++ )
      {
            printf ( "   " );
      }
      printf ( "  %2d\n", MAXWORDLEN );
}

 

运行后的测试:


技术分享

C语言K&R习题系列——统计文档中每个单词所占字母个数,以直方图形式输出

标签:c语言

原文地址:http://anglecode.blog.51cto.com/5628271/1620411

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!