#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 (low=='a' || low=='e' || low=='i' || low=='o' || low=='u'){
stats.numOfVowels++;
}
else{
stats.numOfNonVowels++;
}
}//if alpha
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
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+Cgp0eXBlZGVmIHN0cnVjdCB7CgoJaW50IHN0cmluZ0xlbmd0aDsKCWludCBudW1PZlVwcGVyQ2FzZTsKCWludCBudW1PZkxvd2VyQ2FzZTsKCWludCBudW1PZkRpZ2l0czsKCWludCBudW1PZkJsYW5rU3BhY2VzOwoJaW50IG51bU9mTm9uQWxwaGFOdW1lcmljOwoJaW50IG51bU9mVm93ZWxzOwoJaW50IG51bU9mTm9uVm93ZWxzOwoJaW50IG51bU9mU3BlY2lhbENoYXJzOwoJaW50IG51bU9mUHJpbnRhYmxlTm9uQWxwaGFOdW1lcmljOwoJaW50IG51bU9mSGV4YWRlY2ltYWxEaWdpdHM7CglpbnQgbnVtT2ZCaW5hcnlEaWdpdHM7CglpbnQgbnVtT2ZPY3RldERpZ2l0czsKCWludCBudW1PZlB1bmN0dWF0aW9uOwoJaW50IG51bU9mQ29udHJvbENoYXJzOwoJaW50IG51bU9mUHJpbnRhYmxlQ2hhcnM7Cgp9U3RyaW5nU3RhdHM7CgppbnQgbWFpbih2b2lkKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQoKU3RyaW5nU3RhdHMgZ2V0U3RyaW5nU3RhdHMgKGNoYXIgdGhlU3RyaW5nW10pewoKCVN0cmluZ1N0YXRzIHN0YXRzID0gezB9OwoJaW50IGkgPSAwOwoJCglmb3IgKGk7IHRoZVN0cmluZ1tpXSAhPSAnXDAnOyBpKyspewoJCQoJCXVuc2lnbmVkIGNoYXIgaW5kaXZDaGFyID0gdGhlU3RyaW5nW2ldOwoJCXN0YXRzLnN0cmluZ0xlbmd0aCsrOwoKIAkJaWYgKGlzdXBwZXIoaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZVcHBlckNhc2UrKzsKICAgICAgICAJaWYgKGlzbG93ZXIoaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZMb3dlckNhc2UrKzsKICAgICAgICAJaWYgKGlzZGlnaXQoaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZEaWdpdHMrKzsKICAgICAgICAJaWYgKGlzc3BhY2UoaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZCbGFua1NwYWNlcysrOwogICAgICAgIAlpZiAoIWlzYWxudW0oaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZOb25BbHBoYU51bWVyaWMrKzsKICAgICAgICAJaWYgKGlzeGRpZ2l0KGluZGl2Q2hhcikpIHN0YXRzLm51bU9mSGV4YWRlY2ltYWxEaWdpdHMrKzsKICAgICAgICAJaWYgKGlzY250cmwoaW5kaXZDaGFyKSkgc3RhdHMubnVtT2ZDb250cm9sQ2hhcnMrKzsKCgkJaWYgKGlzYWxwaGEoaW5kaXZDaGFyKSl7CgkJCWNoYXIgbG93ID0gdG9sb3dlcihpbmRpdkNoYXIpOwoJCQkgIAogICAgICAgICAgICAJCWlmIChsb3c9PSdhJyB8fCBsb3c9PSdlJyB8fCBsb3c9PSdpJyB8fCBsb3c9PSdvJyB8fCBsb3c9PSd1Jyl7CgkJCQoJCQkJc3RhdHMubnVtT2ZWb3dlbHMrKzsKCQkJfQogICAgICAgICAgICAJCQoJCQllbHNleyAKCQkJCXN0YXRzLm51bU9mTm9uVm93ZWxzKys7CgkJCX0KCiAgICAgICAgCX0vL2lmIGFscGhhCgogICAgICAgIAlpZiAoaXNwcmludChpbmRpdkNoYXIpKSB7CiAgICAgICAgICAgCQlzdGF0cy5udW1PZlByaW50YWJsZUNoYXJzKys7CiAgICAgICAgICAgIAkJaWYgKCFpc2FsbnVtKGluZGl2Q2hhcikgJiYgaW5kaXZDaGFyICE9ICcgJykgewogICAgICAgICAgICAgICAgCQlzdGF0cy5udW1PZlByaW50YWJsZU5vbkFscGhhTnVtZXJpYysrOwogICAgICAgICAgICAgICAgCQlzdGF0cy5udW1PZlB1bmN0dWF0aW9uKys7CiAgICAgICAgICAgICAgICAJCXN0YXRzLm51bU9mU3BlY2lhbENoYXJzKys7CiAgICAgICAgICAgIAkJfS8vaWYgaXMgIWFsbnVtCgogICAgICAgIAl9Ly9pZiBpcyBwcmludAoKICAgICAgICAJaWYgKGluZGl2Q2hhciA+PSAnMCcgJiYgaW5kaXZDaGFyIDw9ICc3Jykgc3RhdHMubnVtT2ZPY3RldERpZ2l0cysrOwogICAgICAgIAlpZiAoaW5kaXZDaGFyID09ICcwJyB8fCBpbmRpdkNoYXIgPT0gJzEnKSBzdGF0cy5udW1PZkJpbmFyeURpZ2l0cysrOwoJCQoJfS8vZm9yIGxvb3AKCglyZXR1cm4gc3RhdHM7Cgp9Ly9nZXRTdHJpbmdTdGF0cwoK