#include <stdio.h>
#include <string.h>
#include <ctype.h>

typedef struct {

	int stringLength;
	int numOfUpperCase;
	int numOfLowerCase;
	int numOfDigits;
	int numOfBlankSpaces;
	int numOfNonAlphaNumeric;
	int numOfVowels;
	int numOfNonVowels;
	int numOfSpecialChars;
	int numOfPrintableNonAlphaNumeric;
	int numOfHexadecimalDigits;
	int numOfBinaryDigits;
	int numOfOctetDigits;
	int numOfPunctuation;
	int numOfControlChars;
	int numOfPrintableChars;

}StringStats;

int main(void) {
	// your code goes here
	return 0;
}

StringStats getStringStats (char theString[]){

	StringStats stats = {0};
	int i = 0;
	
	for (i; theString[i] != '\0'; i++){
		
		unsigned char indivChar = theString[i];
		stats.stringLength++;

 		if (isupper(indivChar)) stats.numOfUpperCase++;
        	if (islower(indivChar)) stats.numOfLowerCase++;
        	if (isdigit(indivChar)) stats.numOfDigits++;
        	if (isspace(indivChar)) stats.numOfBlankSpaces++;
        	if (!isalnum(indivChar)) stats.numOfNonAlphaNumeric++;
        	if (isxdigit(indivChar)) stats.numOfHexadecimalDigits++;
        	if (iscntrl(indivChar)) stats.numOfControlChars++;

		if (isalpha(indivChar)){
			char low = tolower(indivChar);
			  
            		if (low=='a' || low=='e' || low=='i' || low=='o' || low=='u'){
			
				stats.numOfVowels++;
			}
            		
			else{ 
				stats.numOfNonVowels++;
			}

        	}//if alpha

        	if (isprint(indivChar)) {
           		stats.numOfPrintableChars++;
            		if (!isalnum(indivChar) && indivChar != ' ') {
                		stats.numOfPrintableNonAlphaNumeric++;
                		stats.numOfPunctuation++;
                		stats.numOfSpecialChars++;
            		}//if is !alnum

        	}//if is print

        	if (indivChar >= '0' && indivChar <= '7') stats.numOfOctetDigits++;
        	if (indivChar == '0' || indivChar == '1') stats.numOfBinaryDigits++;
		
	}//for loop

	return stats;

}//getStringStats

