#include <stdio.h>
#include <ctype.h>
#include <string.h>
struct stringStats
{
int stringLength;
int upperCaseCount;
int lowerCaseCount;
int digitCount;
int spaceCount;
int nonAlphaCount;
int vowelCount;
int specialCount;
int otherCount;
int hexCount;
int octalCount;
int binaryCount;
int punctuatorCount;
int controlCount;
int printableCount;
};
// function prototype to get started, or better, use pointers */
struct stringStats getStringStats (char theString[]){
//create structure and initialize all values to zero
struct stringStats stats;
stats.
stringLength = strlen(theString
); stats.upperCaseCount = 0;
stats.lowerCaseCount = 0;
stats.digitCount = 0;
stats.spaceCount = 0;
stats.nonAlphaCount = 0;
stats.vowelCount = 0;
stats.specialCount = 0;
stats.otherCount = 0;
stats.hexCount = 0;
stats.octalCount = 0;
stats.binaryCount = 0;
stats.punctuatorCount = 0;
stats.controlCount = 0;
stats.printableCount = 0;
int i;
//loop through the string and increment each stat as
for (i
=1; i
<strlen(theString
); i
++){ //!! that I use here is a little cursed - I'm using it to invert things twice.
//I expected these functions to return 0 or 1, but many of them return
//a random positive integer - because I want to use them to increment my
//counters, this turns that into 0/1.
char c = theString[i];
stats.
upperCaseCount += !!isupper(c
); stats.
lowerCaseCount += !!islower(c
); stats.
nonAlphaCount += !isalnum(c
); stats.vowelCount += (cl=='a'||cl=='e'||cl=='i'||cl=='o'||cl=='u'||cl=='y');
//I couldn't really determine what was meant by a special character.
//the best definition I could find was just characters that weren't alphanumeric or spaces,
//but that shares the same definition as 'other' and 'punctuator' which feels a bit weird.
stats.octalCount += (c>47&&c<57); //check to see if it's in the 1-8 range
stats.binaryCount += (c == '0'||c=='1');
stats.
printableCount = !!isprint(c
); }
return stats;
}
int main(void) {
// your code goes here
struct stringStats stats = getStringStats("potato12345671234");
printf("\n%d", stats.
octalCount); }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpzdHJ1Y3Qgc3RyaW5nU3RhdHMKewogICAgaW50IHN0cmluZ0xlbmd0aDsKICAgIGludCB1cHBlckNhc2VDb3VudDsKICAgIGludCBsb3dlckNhc2VDb3VudDsKICAgIGludCBkaWdpdENvdW50OwogICAgaW50IHNwYWNlQ291bnQ7CiAgICBpbnQgbm9uQWxwaGFDb3VudDsKICAgIGludCB2b3dlbENvdW50OwogICAgaW50IHNwZWNpYWxDb3VudDsKICAgIGludCBvdGhlckNvdW50OwogICAgaW50IGhleENvdW50OwogICAgaW50IG9jdGFsQ291bnQ7CiAgICBpbnQgYmluYXJ5Q291bnQ7CiAgICBpbnQgcHVuY3R1YXRvckNvdW50OwogICAgaW50IGNvbnRyb2xDb3VudDsKICAgIGludCBwcmludGFibGVDb3VudDsKCn07CgovLyBmdW5jdGlvbiBwcm90b3R5cGUgdG8gZ2V0IHN0YXJ0ZWQsIG9yIGJldHRlciwgdXNlIHBvaW50ZXJzICovCnN0cnVjdCBzdHJpbmdTdGF0cyBnZXRTdHJpbmdTdGF0cyAoY2hhciB0aGVTdHJpbmdbXSl7CgkvL2NyZWF0ZSBzdHJ1Y3R1cmUgYW5kIGluaXRpYWxpemUgYWxsIHZhbHVlcyB0byB6ZXJvCglzdHJ1Y3Qgc3RyaW5nU3RhdHMgc3RhdHM7CglzdGF0cy5zdHJpbmdMZW5ndGggPSBzdHJsZW4odGhlU3RyaW5nKTsKICAgIHN0YXRzLnVwcGVyQ2FzZUNvdW50ID0gMDsKICAgIHN0YXRzLmxvd2VyQ2FzZUNvdW50ID0gMDsKICAgIHN0YXRzLmRpZ2l0Q291bnQgPSAwOwogICAgc3RhdHMuc3BhY2VDb3VudCA9IDA7CiAgICBzdGF0cy5ub25BbHBoYUNvdW50ID0gMDsKICAgIHN0YXRzLnZvd2VsQ291bnQgPSAwOwogICAgc3RhdHMuc3BlY2lhbENvdW50ID0gMDsKICAgIHN0YXRzLm90aGVyQ291bnQgPSAwOwogICAgc3RhdHMuaGV4Q291bnQgPSAwOwogICAgc3RhdHMub2N0YWxDb3VudCA9IDA7CiAgICBzdGF0cy5iaW5hcnlDb3VudCA9IDA7CiAgICBzdGF0cy5wdW5jdHVhdG9yQ291bnQgPSAwOwogICAgc3RhdHMuY29udHJvbENvdW50ID0gMDsKICAgIHN0YXRzLnByaW50YWJsZUNvdW50ID0gMDsKCQoJaW50IGk7CgkvL2xvb3AgdGhyb3VnaCB0aGUgc3RyaW5nIGFuZCBpbmNyZW1lbnQgZWFjaCBzdGF0IGFzIAoJZm9yIChpPTE7IGk8c3RybGVuKHRoZVN0cmluZyk7IGkrKyl7CgkJLy8hISB0aGF0IEkgdXNlIGhlcmUgaXMgYSBsaXR0bGUgY3Vyc2VkIC0gSSdtIHVzaW5nIGl0IHRvIGludmVydCB0aGluZ3MgdHdpY2UuCgkJLy9JIGV4cGVjdGVkIHRoZXNlIGZ1bmN0aW9ucyB0byByZXR1cm4gMCBvciAxLCBidXQgbWFueSBvZiB0aGVtIHJldHVybgoJCS8vYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciAtIGJlY2F1c2UgSSB3YW50IHRvIHVzZSB0aGVtIHRvIGluY3JlbWVudCBteQoJCS8vY291bnRlcnMsIHRoaXMgdHVybnMgdGhhdCBpbnRvIDAvMS4KCQljaGFyIGMgPSB0aGVTdHJpbmdbaV07CgkJY2hhciBjbCA9IGlzdXBwZXIoYykgPyB0b2xvd2VyKGMpIDogYzsKCSAgICBzdGF0cy51cHBlckNhc2VDb3VudCArPSAhIWlzdXBwZXIoYyk7CgkgICAgc3RhdHMubG93ZXJDYXNlQ291bnQgKz0gISFpc2xvd2VyKGMpOwoJICAgIHN0YXRzLmRpZ2l0Q291bnQgKz0gISFpc2RpZ2l0KGMpOwoJICAgIHN0YXRzLnNwYWNlQ291bnQgKz0gISFpc2JsYW5rKGMpOwoJICAgIHN0YXRzLm5vbkFscGhhQ291bnQgKz0gIWlzYWxudW0oYyk7CgkgICAgc3RhdHMudm93ZWxDb3VudCArPSAoY2w9PSdhJ3x8Y2w9PSdlJ3x8Y2w9PSdpJ3x8Y2w9PSdvJ3x8Y2w9PSd1J3x8Y2w9PSd5Jyk7CgkgICAgLy9JIGNvdWxkbid0IHJlYWxseSBkZXRlcm1pbmUgd2hhdCB3YXMgbWVhbnQgYnkgYSBzcGVjaWFsIGNoYXJhY3Rlci4KCSAgICAvL3RoZSBiZXN0IGRlZmluaXRpb24gSSBjb3VsZCBmaW5kIHdhcyBqdXN0IGNoYXJhY3RlcnMgdGhhdCB3ZXJlbid0IGFscGhhbnVtZXJpYyBvciBzcGFjZXMsCgkgICAgLy9idXQgdGhhdCBzaGFyZXMgdGhlIHNhbWUgZGVmaW5pdGlvbiBhcyAnb3RoZXInIGFuZCAncHVuY3R1YXRvcicgd2hpY2ggZmVlbHMgYSBiaXQgd2VpcmQuCgkgICAgc3RhdHMuc3BlY2lhbENvdW50ID0gKGlzcHJpbnQoYykgJiYgIShpc2FscGhhKGMpIHx8IGlzc3BhY2UoYykpKTsKCSAgICBzdGF0cy5vdGhlckNvdW50ID0gKGlzcHJpbnQoYykgJiYgIShpc2FscGhhKGMpIHx8IGlzc3BhY2UoYykpKTsKCSAgICBzdGF0cy5oZXhDb3VudCArPSAhIWlzeGRpZ2l0KGMpOwoJICAgIHN0YXRzLm9jdGFsQ291bnQgKz0gKGM+NDcmJmM8NTcpOyAvL2NoZWNrIHRvIHNlZSBpZiBpdCdzIGluIHRoZSAxLTggcmFuZ2UKCSAgICBzdGF0cy5iaW5hcnlDb3VudCArPSAoYyA9PSAnMCd8fGM9PScxJyk7CgkgICAgc3RhdHMucHVuY3R1YXRvckNvdW50ICs9IChpc3ByaW50KGMpICYmICEoaXNhbHBoYShjKSB8fCBpc3NwYWNlKGMpKSk7CgkgICAgc3RhdHMuY29udHJvbENvdW50ID0gISFpc2NudHJsKGMpOwoJICAgIHN0YXRzLnByaW50YWJsZUNvdW50ID0gISFpc3ByaW50KGMpOwkKCX0KCXJldHVybiBzdGF0czsKCQp9CgppbnQgbWFpbih2b2lkKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkKCXN0cnVjdCBzdHJpbmdTdGF0cyBzdGF0cyA9IGdldFN0cmluZ1N0YXRzKCJwb3RhdG8xMjM0NTY3MTIzNCIpOwoJcHJpbnRmKCJcbiVkIiwgc3RhdHMub2N0YWxDb3VudCk7Cn0K