#include <string>
#include <iostream>
#include <cstddef>
#include <memory>
#include <utility>
std:: unique_ptr < int [ ] > count_char( const std:: string & s)
{
// consider 128 ASCII decimal and their coresponding character codes
std:: unique_ptr < int [ ] > charASCIIArray = std:: unique_ptr < int [ ] > ( 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 std:: move ( charASCIIArray) ;
}
int main( )
{
std:: string userinput = "random words WITH *- aLl" ;
std:: unique_ptr < 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 " ;
return 0 ;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGRlZj4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNvdW50X2NoYXIoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCnsKCS8vIGNvbnNpZGVyIDEyOCBBU0NJSSBkZWNpbWFsIGFuZCB0aGVpciBjb3Jlc3BvbmRpbmcgY2hhcmFjdGVyIGNvZGVzCglzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNoYXJBU0NJSUFycmF5ID0gc3RkOjp1bmlxdWVfcHRyPGludFtdPihuZXcgaW50WzEyOF17MH0pOwoJZm9yIChjb25zdCBhdXRvJiBpdCA6IHMpCgl7CgkJaWYgKCgnQScgPD0gaXQgJiYgaXQgPD0gJ1onKSB8fCAgICAgLy8gaWYgY2hhciBiZXR3ZWVuIChBLEIsLi4uLixaKSBvcgoJCQkoJ2EnIDw9IGl0ICYmIGl0IDw9ICd6JykpICAgICAgIC8vICAgICAgICAgYmV0d2VlbiAoYSxiLC4uLi4seikKCQkJY2hhckFTQ0lJQXJyYXlbc3RhdGljX2Nhc3Q8aW50PihpdCldKys7IC8vIHdlIGNvdW50IGVhY2ggY29ycmVzcG9uZGluZyBhcnJheSB0aGVuCgl9CglyZXR1cm4gc3RkOjptb3ZlKGNoYXJBU0NJSUFycmF5KTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OnN0cmluZyB1c2VyaW5wdXQgPSAicmFuZG9tIHdvcmRzIFdJVEggKi0gYUxsIjsKCglzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNoYXJBU0NJSUFycmF5ID0gY291bnRfY2hhcih1c2VyaW5wdXQpOwoJZm9yIChzdGQ6OnNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgMTI4OyArK2luZGV4KQoJCWlmIChjaGFyQVNDSUlBcnJheVtpbmRleF0gIT0gMCkKCQkJc3RkOjpjb3V0IDw8ICJMZXR0ZXIgIiA8PCBzdGF0aWNfY2FzdDxjaGFyPihpbmRleCkgIC8vIGNvbnZlcnQgYmFjayB0byBjaGFyCgkJCTw8ICIgb2NjdXJlZCAiIDw8IGNoYXJBU0NJSUFycmF5W2luZGV4XSA8PCAiIHRpbWVzLlxuIjsKCglyZXR1cm4gMDsKfQo=