#include <stdio.h>
#include <ctype.h>
struct stringStats
{
int stringLength;
int upperCaseCount;
int lowerCaseCount;
int digitCount;
int blankCount;
int nonAlnumCount;
int vowelCount;
int nonVowelCount;
int specialCharCount;
int hexDigitCount;
int octalDigitCount;
int binaryDigitCount;
int punctuatorCount;
int controlCharCount;
int printableCount;
};
struct stringStats getStringStats(char theString[])
{
struct stringStats stats = {0};
unsigned char c;
char *p = theString;
while (*p != '\0')
{
c = (unsigned char)*p;
stats.stringLength++;
if (isupper((unsigned char)c
)) stats.
upperCaseCount++; if (islower((unsigned char)c
)) stats.
lowerCaseCount++; if (isdigit((unsigned char)c
)) stats.
digitCount++;
if (c == ' ') stats.blankCount++;
if (!isalnum((unsigned char)c
)) stats.
nonAlnumCount++;
{
char lower
= (char)tolower((unsigned char)c
); if (lower == 'a' || lower == 'e' || lower == 'i' || lower == 'o' || lower == 'u')
stats.vowelCount++;
else
stats.nonVowelCount++;
}
if (isprint((unsigned char)c
) && !isalnum((unsigned char)c
) && c
!= ' ') {
stats.specialCharCount++;
stats.punctuatorCount++;
}
if (isxdigit((unsigned char)c
)) stats.
hexDigitCount++; if (c >= '0' && c <= '7') stats.octalDigitCount++;
if (c == '0' || c == '1') stats.binaryDigitCount++;
if (iscntrl((unsigned char)c
)) stats.
controlCharCount++; if (isprint((unsigned char)c
)) stats.
printableCount++;
p++;
}
return stats;
}
int main(void)
{
char testString[] = "AbCde"; // Uppercase: A,C (2) | Lowercase: b,d,e (3)
struct stringStats s = getStringStats(testString);
printf("String: \"%s\"\n", testString
); printf("Uppercase letters: %d\n", s.
upperCaseCount); printf("Lowercase letters: %d\n", s.
lowerCaseCount);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgoKc3RydWN0IHN0cmluZ1N0YXRzIAp7CiAgICBpbnQgc3RyaW5nTGVuZ3RoOwogICAgaW50IHVwcGVyQ2FzZUNvdW50OwogICAgaW50IGxvd2VyQ2FzZUNvdW50OwogICAgaW50IGRpZ2l0Q291bnQ7CiAgICBpbnQgYmxhbmtDb3VudDsKICAgIGludCBub25BbG51bUNvdW50OwogICAgaW50IHZvd2VsQ291bnQ7CiAgICBpbnQgbm9uVm93ZWxDb3VudDsKICAgIGludCBzcGVjaWFsQ2hhckNvdW50OwogICAgaW50IGhleERpZ2l0Q291bnQ7CiAgICBpbnQgb2N0YWxEaWdpdENvdW50OwogICAgaW50IGJpbmFyeURpZ2l0Q291bnQ7CiAgICBpbnQgcHVuY3R1YXRvckNvdW50OwogICAgaW50IGNvbnRyb2xDaGFyQ291bnQ7CiAgICBpbnQgcHJpbnRhYmxlQ291bnQ7Cn07CgpzdHJ1Y3Qgc3RyaW5nU3RhdHMgZ2V0U3RyaW5nU3RhdHMoY2hhciB0aGVTdHJpbmdbXSkKewogICAgc3RydWN0IHN0cmluZ1N0YXRzIHN0YXRzID0gezB9OwogICAgdW5zaWduZWQgY2hhciBjOwogICAgY2hhciAqcCA9IHRoZVN0cmluZzsKCiAgICB3aGlsZSAoKnAgIT0gJ1wwJykKICAgIHsKICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpKnA7CiAgICAgICAgc3RhdHMuc3RyaW5nTGVuZ3RoKys7CgogICAgICAgIGlmIChpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKWMpKSBzdGF0cy51cHBlckNhc2VDb3VudCsrOwogICAgICAgIGlmIChpc2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpKSBzdGF0cy5sb3dlckNhc2VDb3VudCsrOwogICAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKSBzdGF0cy5kaWdpdENvdW50Kys7CgogICAgICAgIGlmIChjID09ICcgJykgc3RhdHMuYmxhbmtDb3VudCsrOwogICAgICAgIGlmICghaXNhbG51bSgodW5zaWduZWQgY2hhciljKSkgc3RhdHMubm9uQWxudW1Db3VudCsrOwoKICAgICAgICBpZiAoaXNhbHBoYSgodW5zaWduZWQgY2hhciljKSkKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgbG93ZXIgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpOwogICAgICAgICAgICBpZiAobG93ZXIgPT0gJ2EnIHx8IGxvd2VyID09ICdlJyB8fCBsb3dlciA9PSAnaScgfHwgbG93ZXIgPT0gJ28nIHx8IGxvd2VyID09ICd1JykKICAgICAgICAgICAgICAgIHN0YXRzLnZvd2VsQ291bnQrKzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3RhdHMubm9uVm93ZWxDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzcHJpbnQoKHVuc2lnbmVkIGNoYXIpYykgJiYgIWlzYWxudW0oKHVuc2lnbmVkIGNoYXIpYykgJiYgYyAhPSAnICcpCiAgICAgICAgewogICAgICAgICAgICBzdGF0cy5zcGVjaWFsQ2hhckNvdW50Kys7CiAgICAgICAgICAgIHN0YXRzLnB1bmN0dWF0b3JDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKSBzdGF0cy5oZXhEaWdpdENvdW50Kys7CiAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzcnKSBzdGF0cy5vY3RhbERpZ2l0Q291bnQrKzsKICAgICAgICBpZiAoYyA9PSAnMCcgfHwgYyA9PSAnMScpIHN0YXRzLmJpbmFyeURpZ2l0Q291bnQrKzsKCiAgICAgICAgaWYgKGlzY250cmwoKHVuc2lnbmVkIGNoYXIpYykpIHN0YXRzLmNvbnRyb2xDaGFyQ291bnQrKzsKICAgICAgICBpZiAoaXNwcmludCgodW5zaWduZWQgY2hhciljKSkgc3RhdHMucHJpbnRhYmxlQ291bnQrKzsKCiAgICAgICAgcCsrOwogICAgfQoKICAgIHJldHVybiBzdGF0czsKfQoKaW50IG1haW4odm9pZCkKewogICAgY2hhciB0ZXN0U3RyaW5nW10gPSAiQWJDZGUiOyAgLy8gVXBwZXJjYXNlOiBBLEMgKDIpIHwgTG93ZXJjYXNlOiBiLGQsZSAoMykKCiAgICBzdHJ1Y3Qgc3RyaW5nU3RhdHMgcyA9IGdldFN0cmluZ1N0YXRzKHRlc3RTdHJpbmcpOwoKICAgIHByaW50ZigiU3RyaW5nOiBcIiVzXCJcbiIsIHRlc3RTdHJpbmcpOwogICAgcHJpbnRmKCJVcHBlcmNhc2UgbGV0dGVyczogJWRcbiIsIHMudXBwZXJDYXNlQ291bnQpOwogICAgcHJpbnRmKCJMb3dlcmNhc2UgbGV0dGVyczogJWRcbiIsIHMubG93ZXJDYXNlQ291bnQpOwoKICAgIHJldHVybiAwOwp9