aboutsummaryrefslogtreecommitdiff
path: root/challenge-033/ulrich-rieke/cpp/ch-1.cpp
blob: 563d91befac7447095cd54a081347bd26a2a0e06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <map>
#include <cctype>
#include <fstream>
#include <algorithm>
#include <string>

char myTransformer( char d ) {
  if ( std::isupper( d ) )
      return std::tolower( d ) ;
  else
      return d ;
}

int main( int argc, char* argv[] ) {
  for ( int i = 1 ; i < argc ; i++ ) {
      std::string file( argv[ i ] ) ;
      std::ifstream infile( file , std::ios::binary | std::ios::in ) ;
      if ( infile ) {
    std::map<char, int> frequencies ;
    while ( infile.good( ) ) {
        std::string line ;
        std::getline( infile, line ) ;
        std::transform( line.begin( ) , line.end( ) , line.begin( ) ,
          myTransformer ) ;
        for ( char c : line ) {
          if ( std::isalpha( c ) ) {
          frequencies[c]++ ;
          }
        }
    }
    infile.close( ) ;
    std::cout << "Letter frequency for file " << file << " :\n" ;
    for ( auto & p : frequencies ) {
        std::cout << p.first << ": " << p.second << std::endl ;
    }
      }
      else {
    std::cout << "Can't open file " << file << " !\n" ;
      }
  }
}