标签: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