/*************************************************************************

> File Name: UpperLowerDigit.cpp

> Author: wangzhichen > Created Time: 2016-12-05
> Brief: A fast algorithm for character recognition
************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <ctype.h>

#include <iostream>

using namespace std;

#define ISUPPER 1

#define ISLOWER 2

#define ISDIGIT 4

class CharRecognition {

private:

int Array[256];

static CharRecognition object;

private:

void Init() {

int i;

memset(Array, 0, sizeof Array);

for(i = 'A';i <= 'Z';i++) Array[i] = ISUPPER;

for(i = 'a';i <= 'z';i++) Array[i] = ISLOWER;

for(i = '0';i <= '9';i++) Array[i] = ISDIGIT;

}

CharRecognition() {

Init();

}

public:

static CharRecognition &GetInstance() {

return object;

}

inline bool Isupper(char ch) const {

return ISUPPER & Array[ch];

}

inline bool Islower(char ch) const {

return ISLOWER & Array[ch];

}

inline bool Isdigit(char ch) const {

return ISDIGIT & Array[ch];

}

};

CharRecognition CharRecognition::object;

int main(int argc, char **argv) {

char ch = getchar();

getchar();

if(CharRecognition::GetInstance().Isupper(ch)) {

printf("%c is upper...!\n", ch);

}

else

if(CharRecognition::GetInstance().Islower(ch)) {

printf("%c is lower...!\n", ch);

}

else

if(CharRecognition::GetInstance().Isdigit(ch)) {

printf("%c is digit...!\n", ch);

}



return 0;

}