/*
 * Rechnernutzung in der Physik, SS 2007, Blatt 2, Aufgabe 4
 *
 * Buchstabenhaeufigkeit, Makefiles
 */

#include<iostream>
#include<fstream>
// #include<cctype>
#include<string>
#include<iomanip>

// Funktionsdeklaration der "externen" Routine(n)
// hier: Umwandlung in Grossbuchstaben in Extra-Datei
#include "charconv.h" 

using namespace std;

int main(int argc, char* argv[]) {
    // Hier ist noch was zu tun.
    // cout << "Das Programm tut noch nicht, was es soll..." << endl ;
    
    // Schauen ob schon ein Dateiname in der Kommandozeile mitgegeben wurde...
    // andernfalls abfragen
    string filename;
    if(argc == 2) 
    {
	filename = (string) argv[1];
    }
    else
    {
	cout << "Bitte Dateinamen angeben: ";
        cin >> filename;
    }
    
    // Anlegen eines Array zum Speichern der Haeufigkeit
    // 26 Buchstaben
    int verteil[26];
    float haeufig[26];
    int insg=0;
    for(int i=0;i<=25;i++)
    {
	verteil[i] = 0;
	haeufig[i] = 0;
    }
    
    
    // Eingabedatei laden
    
    ifstream infile(filename.c_str());
    
    // Zeichenweise auslesen in Temp Char
    
    char tmp;
    while(infile >> tmp)
    {
	//infile >> tmp;
	tmp = converttoupper(tmp);
	if(tmp >= 'A' && tmp <= 'Z')
	{
	    verteil[tmp - 65]++;
	    insg++;
	}
    }
    cout << "Insgesamt " << insg << " Buchstaben\n";
    for(int i =0;i<= 25;i++)
    {
	haeufig[i] = ((float)verteil[i] / (float)insg) * 100.0;
	cout << (char)(i+65) << " : " << setw(10) << verteil[i] << setw(4) << "=" << setprecision(4) << setw(10) << haeufig[i] << "%" << endl;
    }
    
}
