#include <string> 
#include <iostream> 
#include <cstddef> 
 
int *  count_char( const  std:: string &  s) 
{ 
    // consider 128 ASCII decimal and their coresponding character codes 
    int  * charASCIIArray =  new  int [ 128 ] { 0 } ; 
    for ( const  auto &  it:  s) 
    { 
        if ( ( 'A'  <=  it &&  it <=  'Z' )  ||      // if char between (A,B,....,Z) or 
           ( 'a'  <=  it &&  it <=  'z' )  )       //         between (a,b,....,z) 
           charASCIIArray[ static_cast < int > ( it) ] ++ ;  // we count each corresponding array then 
    } 
    return  charASCIIArray; 
} 
 
int  main( ) 
{ 
    std:: string  userinput =  "random words WITH *- aLl" ; 
 
    int  * charASCIIArray =  count_char( userinput) ; 
    for ( std:: size_t  index =  0 ;  index <  128 ;  ++ index) 
        if ( charASCIIArray[ index]  ! =  0 ) 
        std:: cout  <<  "Letter "  <<  static_cast < char > ( index)   // convert back to char 
                  <<  " occured "  <<  charASCIIArray[ index]  <<  " times.\n " ; 
 
    delete [ ]  charASCIIArray; 
    return  0 ; 
} 
 
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGRlZj4KCmludCogY291bnRfY2hhcihjb25zdCBzdGQ6OnN0cmluZyYgcykKewogICAgLy8gY29uc2lkZXIgMTI4IEFTQ0lJIGRlY2ltYWwgYW5kIHRoZWlyIGNvcmVzcG9uZGluZyBjaGFyYWN0ZXIgY29kZXMKICAgIGludCAqY2hhckFTQ0lJQXJyYXkgPSBuZXcgaW50WzEyOF17MH07CiAgICBmb3IoY29uc3QgYXV0byYgaXQ6IHMpCiAgICB7CiAgICAgICAgaWYoKCdBJyA8PSBpdCAmJiBpdCA8PSAnWicpIHx8ICAgICAvLyBpZiBjaGFyIGJldHdlZW4gKEEsQiwuLi4uLFopIG9yCiAgICAgICAgICAgKCdhJyA8PSBpdCAmJiBpdCA8PSAneicpICkgICAgICAvLyAgICAgICAgIGJldHdlZW4gKGEsYiwuLi4uLHopCiAgICAgICAgICAgY2hhckFTQ0lJQXJyYXlbc3RhdGljX2Nhc3Q8aW50PihpdCldKys7IC8vIHdlIGNvdW50IGVhY2ggY29ycmVzcG9uZGluZyBhcnJheSB0aGVuCiAgICB9CiAgICByZXR1cm4gY2hhckFTQ0lJQXJyYXk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgdXNlcmlucHV0ID0gInJhbmRvbSB3b3JkcyBXSVRIICotIGFMbCI7CgogICAgaW50ICpjaGFyQVNDSUlBcnJheSA9IGNvdW50X2NoYXIodXNlcmlucHV0KTsKICAgIGZvcihzdGQ6OnNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgMTI4OyArK2luZGV4KQogICAgICAgIGlmKGNoYXJBU0NJSUFycmF5W2luZGV4XSAhPSAwKQogICAgICAgIHN0ZDo6Y291dCA8PCAiTGV0dGVyICIgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oaW5kZXgpICAvLyBjb252ZXJ0IGJhY2sgdG8gY2hhcgogICAgICAgICAgICAgICAgICA8PCAiIG9jY3VyZWQgIiA8PCBjaGFyQVNDSUlBcnJheVtpbmRleF0gPDwgIiB0aW1lcy5cbiI7CgogICAgZGVsZXRlW10gY2hhckFTQ0lJQXJyYXk7CiAgICByZXR1cm4gMDsKfQo=