Project 5

Charcter Counting Program

Requirements

Write a program that will accept input on stdin (which is normally the keyboard)
and will count the characters that appear in the input.  The input will consist of some number of lines
and be terminated with an EOF.  The input could contain spaces, so scanf can not be used.  For the sake
of discussion, assume that the input will be characters will be encoded as binary values ranging from
0 to 255.  It is possible to generate nonprintable characters, which are not in the range of 32- 126.
The input must contain over 400 characters and there must be at least 50 of one of the characters.
You may have to scale the data, so that each star represents more than one occurance.
You should use file redirection, so that you don't have to type the input over and over again.
On UNIX systems, you have to enter Control-D to indicate that you have
entered all of the data.
On PC's, you have to enter Control-Z.

To get the input, you will have to use something like:

      while( gets(inputLine) != NULL )

where inputLine is defined as a character array that is at least as large as the largest input line.

After the input is complete, print out all of the characters and the number of times that they appeared in
the input.  Additionally, draw a histrogram (using '*' for each occurrance) for the number of occurances.
Since your output screen is limited in size, only output a maximum of 50 stars.

Use a separate function to print the histogram, plus any other functions, as appropriate.

Example

    umbc9: proj5 < myInputData

In this case, the input file is myInputData.  If you want easy way to create that file, you can do this:

    umbc9:man gets > myInputData

Sample

This is a sample of the input for project 5, showing the input
and the output.  Notice how the histogram is printed out in this
sample.
 
This is quite a test for project 5, because it shows
the input and the output.  Notice how the histogram
appears.  Your input will be different than this,
see the requirements for specifics.
 

Total number of characters was: 187
The largest number of times that any one character appeared was 31
Scaling factor is 1
 
 

  0( * ):      0
  1( * ):      0
  2( * ):      0
  3( * ):      0
  4( * ):      0
  5( * ):      0
  6( * ):      0
  7( * ):      0
  8( * ):      0
  9( * ):      0
 10( * ):      0
 11( * ):      0
 12( * ):      0
 13( * ):      0
 14( * ):      0
 15( * ):      0
 16( * ):      0
 17( * ):      0
 18( * ):      0
 19( * ):      0
 20( * ):      0
 21( * ):      0
 22( * ):      0
 23( * ):      0
 24( * ):      0
 25( * ):      0
 26( * ):      0
 27( * ):      0
 28( * ):      0
 29( * ):      0
 30( * ):      0
 31( * ):      0
 32(   ):     31*******************************
 33( ! ):      0
 34( " ):      0
 35( # ):      0
 36( $ ):      0
 37( % ):      0
 38( & ):      0
 39( ' ):      0
 40( ( ):      0
 41( ) ):      0
 42( * ):      0
 43( + ):      0
 44( , ):      2**
 45( - ):      0
 46( . ):      3***
 47( / ):      0
 48( 0 ):      0
 49( 1 ):      0
 50( 2 ):      0
 51( 3 ):      0
 52( 4 ):      0
 53( 5 ):      1*
 54( 6 ):      0
 55( 7 ):      0
 56( 8 ):      0
 57( 9 ):      0
 58( : ):      0
 59( ; ):      0
 60( < ):      0
 61( = ):      0
 62( > ):      0
 63( ? ):      0
 64( @ ):      0
 65( A ):      0
 66( B ):      0
 67( C ):      0
 68( D ):      0
 69( E ):      0
 70( F ):      0
 71( G ):      0
 72( H ):      0
 73( I ):      0
 74( J ):      0
 75( K ):      0
 76( L ):      0
 77( M ):      0
 78( N ):      1*
 79( O ):      0
 80( P ):      0
 81( Q ):      0
 82( R ):      0
 83( S ):      0
 84( T ):      1*
 85( U ):      0
 86( V ):      0
 87( W ):      0
 88( X ):      0
 89( Y ):      1*
 90( Z ):      0
 91( [ ):      0
 92( \ ):      0
 93( ] ):      0
 94( ^ ):      0
 95( _ ):      0
 96( ` ):      0
 97( a ):      7*******
 98( b ):      2**
 99( c ):      5*****
100( d ):      2**
101( e ):     20********************
102( f ):      5*****
103( g ):      1*
104( h ):     10**********
105( i ):     14**************
106( j ):      1*
107( k ):      0
108( l ):      2**
109( m ):      2**
110( n ):      6******
111( o ):      9*********
112( p ):      7*******
113( q ):      2**
114( r ):      9*********
115( s ):     13*************
116( t ):     19*******************
117( u ):      8********
118( v ):      0
119( w ):      3***
120( x ):      0
121( y ):      0
122( z ):      0
123( { ):      0
124( | ):      0
125( } ):      0
126( ~ ):      0
127( * ):      0
128( * ):      0
129( * ):      0
130( * ):      0
131( * ):      0
132( * ):      0
133( * ):      0
134( * ):      0
135( * ):      0
136( * ):      0
137( * ):      0
138( * ):      0
139( * ):      0
140( * ):      0
141( * ):      0
142( * ):      0
143( * ):      0
144( * ):      0
145( * ):      0
146( * ):      0
147( * ):      0
148( * ):      0
149( * ):      0
150( * ):      0
151( * ):      0
152( * ):      0
153( * ):      0
154( * ):      0
155( * ):      0
156( * ):      0
157( * ):      0
158( * ):      0
159( * ):      0
160( * ):      0
161( * ):      0
162( * ):      0
163( * ):      0
164( * ):      0
165( * ):      0
166( * ):      0
167( * ):      0
168( * ):      0
169( * ):      0
170( * ):      0
171( * ):      0
172( * ):      0
173( * ):      0
174( * ):      0
175( * ):      0
176( * ):      0
177( * ):      0
178( * ):      0
179( * ):      0
180( * ):      0
181( * ):      0
182( * ):      0
183( * ):      0
184( * ):      0
185( * ):      0
186( * ):      0
187( * ):      0
188( * ):      0
189( * ):      0
190( * ):      0
191( * ):      0
192( * ):      0
193( * ):      0
194( * ):      0
195( * ):      0
196( * ):      0
197( * ):      0
198( * ):      0
199( * ):      0
200( * ):      0
201( * ):      0
202( * ):      0
203( * ):      0
204( * ):      0
205( * ):      0
206( * ):      0
207( * ):      0
208( * ):      0
209( * ):      0
210( * ):      0
211( * ):      0
212( * ):      0
213( * ):      0
214( * ):      0
215( * ):      0
216( * ):      0
217( * ):      0
218( * ):      0
219( * ):      0
220( * ):      0
221( * ):      0
222( * ):      0
223( * ):      0
224( * ):      0
225( * ):      0
226( * ):      0
227( * ):      0
228( * ):      0
229( * ):      0
230( * ):      0
231( * ):      0
232( * ):      0
233( * ):      0
234( * ):      0
235( * ):      0
236( * ):      0
237( * ):      0
238( * ):      0
239( * ):      0
240( * ):      0
241( * ):      0
242( * ):      0
243( * ):      0
244( * ):      0
245( * ):      0
246( * ):      0
247( * ):      0
248( * ):      0
249( * ):      0
250( * ):      0
251( * ):      0
252( * ):      0
253( * ):      0
254( * ):      0
255( * ):      0