/********************************************************/
// R. A. Hillyard
// charCount.cpp
// October 2001
//
//
// read character from a file and count occurences of each letter
// and number of other non alphabet symbols. Then reports the
//result to the user
/********************************************************/
#include<iostream> //cout and cin
#include<iomanip> //setw
#include<fstream> //file functions
#include<cctype> //character functions
#include<cstdlib> //for exit
using namespace std;
bool openInFile(ifstream& inData);
//pre conditions: inData has been declared as a file streams
//post condition: inData will have been opened - function returns false on fail
void printArray(int a[], int arraySize);
//pre conditions: a[] has valid data for size elements
//post condition: Will display a character count to the screen
void initArray(int a[], int size);
//pre conditions: a[] and size have been declared
//post condition: each element of a[] will be initialized to 0
const int SIZE = 27; //size or alphabet array
int main()
{
int charCount[SIZE]; //array to hold letter counts
char next; //next character in the file
int index; //index for array element
ifstream inData; //declare file streams
if(!openInFile(inData)) //open file for read - check for fail
{ exit(1); }
initArray(charCount, SIZE); //initialize array counts
inData.get(next); //Read data from file a character at a time
while(!inData.eof()) //stop at end of file
{
//cout << next;
if(isalpha(next)) //if alphabet char increment count
{
next = toupper(next); //treat lower and upper case the same
index = next - 'A'; //ASCII Value gives offset into array
charCount[index]++; //update that counter
}
else //update other count.
{
if(!isspace(next)) //skip white space
charCount[SIZE-1]++;
}
inData.get(next); //get next character from file
}//end while
//report results
printArray(charCount,SIZE);
}//end main
/*************************************************************/
//Initialize each element of an integer array to 0
/*************************************************************/
void initArray(int a[], int size)
{
for(int i = 0; i<size; i++)
{ a[i] = 0; }
}
/*************************************************************/
//print elements of array - formatted to appear in columns
/*************************************************************/
void printArray(int a[], int size)
{
cout << "\nThe file contains the following letter counts\n";
for(int i = 0; i<size-1; i++)
{
cout << setw(4) << char('A' + i) << " - " << setw(3) << a[i];
if((i+1)%5 == 0)
cout << endl;
}
cout << "\nThere were " << a[size-1] << " other symbols\n";
}
/*************************************************************/
/*************************************************************/
bool openInFile(ifstream& inData)
{
char name[20];
cout << "Enter File Name: ";
cin >> name;
inData.open(name);
if(inData.fail())
{
cout << "Failed to open input file " << name << endl;
return false;
}
return true;
}//end openInFile
/*************************************************************/
/******************Input File*****************
This is the hello program it has all kinds of characters in it. There are digits
such as: 2,5 ,789, 3456 and last but not least numbers like 45.78 and 33.56.
Special ^%# charac)(?<>ters abound!!!! + u get 2 Count spaces
* dont forget a tab to add + sub - or *.,~
You can test your program by getting the following results
Total chars: 448
Total white: 107
Total digit: 33
Total letter: 274
Total vowel: 99
Total Other: 34
/******************Program Output*************
Enter File Name: letterCount.txt
The file contains the following letter counts
A - 28 B - 6 C - 10 D - 9 E - 23
F - 3 G - 9 H - 12 I - 15 J - 0
K - 2 L - 19 M - 3 N - 12 O - 23
P - 4 Q - 0 R - 18 S - 20 T - 41
U - 10 V - 1 W - 3 X - 0 Y - 3
Z - 0
There were 67 other symbols
*/