// **************************************************
// Function: getStringStats
//
// Description: analyzes a string and counts different
// types of characters
//
// Parameters: s[] - input string
//
// Returns: structure containing all counts
//
// **************************************************
#include <stdio.h>
#include <ctype.h>
// structure definition
struct stringStats
{
int stringLength;
int upperCaseCount;
int lowerCaseCount;
int digitCount;
int spaceCount;
int nonAlnumCount;
int vowelCount;
int nonVowelCount;
int specialCharCount;
int symbolCount; //placeholder name
int hexCount;
int octalCount;
int binaryCount;
int punctCount;
int controlCount;
int printableCount;
};
// function prototype
struct stringStats getStringStats(char s[]);
int main()
{
char input[100];
struct stringStats result;
// get input from user
fgets(input
, sizeof(input
), stdin
);
// call function
result = getStringStats(input);
// display results
printf("\nString Length: %d", result.
stringLength); printf("\nUppercase: %d", result.
upperCaseCount); printf("\nLowercase: %d", result.
lowerCaseCount); printf("\nDigits: %d", result.
digitCount); printf("\nSpaces: %d", result.
spaceCount); printf("\nNon-Alphanumeric: %d", result.
nonAlnumCount); printf("\nControl Characters: %d", result.
controlCount); printf("\nPrintable Characters: %d", result.
printableCount); printf("\nVowels: %d", result.
vowelCount); printf("\nNon-Vowels: %d", result.
nonVowelCount); printf("\nHex Digits: %d", result.
hexCount); printf("\nOctal Digits: %d", result.
octalCount); printf("\nBinary Digits: %d", result.
binaryCount); printf("\nPunctuation: %d", result.
punctCount); printf("\nSpecial Characters: %d\n", result.
specialCharCount);
return 0;
}
struct stringStats getStringStats(char s[])
{
struct stringStats st = {0};
int i = 0;
while(s[i] != '\0')
{
char c = s[i];
st.stringLength++;
if(isupper(c
)) st.
upperCaseCount++; if(islower(c
)) st.
lowerCaseCount++; if(!isalnum(c
)) st.
nonAlnumCount++; if(isprint(c
)) st.
printableCount++;
{
if(l=='a'||l=='e'||l=='i'||l=='o'||l=='u')
st.vowelCount++;
else
st.nonVowelCount++;
}
if(c >= '0' && c <= '7') st.octalCount++;
if(c == '0' || c == '1') st.binaryCount++;
if(ispunct(c
)) st.
specialCharCount++;
i++;
}
return st;
}
Ly8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gRnVuY3Rpb246IGdldFN0cmluZ1N0YXRzCi8vCi8vIERlc2NyaXB0aW9uOiBhbmFseXplcyBhIHN0cmluZyBhbmQgY291bnRzIGRpZmZlcmVudAovLyAgICAgICAgICAgICAgdHlwZXMgb2YgY2hhcmFjdGVycwovLwovLyBQYXJhbWV0ZXJzOiBzW10gLSBpbnB1dCBzdHJpbmcKLy8KLy8gUmV0dXJuczogc3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsIGNvdW50cwovLwovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgoKLy8gc3RydWN0dXJlIGRlZmluaXRpb24Kc3RydWN0IHN0cmluZ1N0YXRzCnsKICAgIGludCBzdHJpbmdMZW5ndGg7CiAgICBpbnQgdXBwZXJDYXNlQ291bnQ7CiAgICBpbnQgbG93ZXJDYXNlQ291bnQ7CiAgICBpbnQgZGlnaXRDb3VudDsKICAgIGludCBzcGFjZUNvdW50OwogICAgaW50IG5vbkFsbnVtQ291bnQ7CiAgICBpbnQgdm93ZWxDb3VudDsKICAgIGludCBub25Wb3dlbENvdW50OwogICAgaW50IHNwZWNpYWxDaGFyQ291bnQ7CiAgICBpbnQgc3ltYm9sQ291bnQ7IC8vcGxhY2Vob2xkZXIgbmFtZQogICAgaW50IGhleENvdW50OwogICAgaW50IG9jdGFsQ291bnQ7CiAgICBpbnQgYmluYXJ5Q291bnQ7CiAgICBpbnQgcHVuY3RDb3VudDsKICAgIGludCBjb250cm9sQ291bnQ7CiAgICBpbnQgcHJpbnRhYmxlQ291bnQ7Cn07CgovLyBmdW5jdGlvbiBwcm90b3R5cGUKc3RydWN0IHN0cmluZ1N0YXRzIGdldFN0cmluZ1N0YXRzKGNoYXIgc1tdKTsKCmludCBtYWluKCkKewogICAgY2hhciBpbnB1dFsxMDBdOwogICAgc3RydWN0IHN0cmluZ1N0YXRzIHJlc3VsdDsKCiAgICAvLyBnZXQgaW5wdXQgZnJvbSB1c2VyCiAgICBwcmludGYoIkVudGVyIGEgc3RyaW5nOiAiKTsKICAgIGZnZXRzKGlucHV0LCBzaXplb2YoaW5wdXQpLCBzdGRpbik7CgogICAgLy8gY2FsbCBmdW5jdGlvbgogICAgcmVzdWx0ID0gZ2V0U3RyaW5nU3RhdHMoaW5wdXQpOwoKICAgIC8vIGRpc3BsYXkgcmVzdWx0cwogICAgcHJpbnRmKCJcblN0cmluZyBMZW5ndGg6ICVkIiwgcmVzdWx0LnN0cmluZ0xlbmd0aCk7CiAgICBwcmludGYoIlxuVXBwZXJjYXNlOiAlZCIsIHJlc3VsdC51cHBlckNhc2VDb3VudCk7CiAgICBwcmludGYoIlxuTG93ZXJjYXNlOiAlZCIsIHJlc3VsdC5sb3dlckNhc2VDb3VudCk7CiAgICBwcmludGYoIlxuRGlnaXRzOiAlZCIsIHJlc3VsdC5kaWdpdENvdW50KTsKICAgIHByaW50ZigiXG5TcGFjZXM6ICVkIiwgcmVzdWx0LnNwYWNlQ291bnQpOwogICAgcHJpbnRmKCJcbk5vbi1BbHBoYW51bWVyaWM6ICVkIiwgcmVzdWx0Lm5vbkFsbnVtQ291bnQpOwogICAgcHJpbnRmKCJcbkNvbnRyb2wgQ2hhcmFjdGVyczogJWQiLCByZXN1bHQuY29udHJvbENvdW50KTsKICAgIHByaW50ZigiXG5QcmludGFibGUgQ2hhcmFjdGVyczogJWQiLCByZXN1bHQucHJpbnRhYmxlQ291bnQpOwogICAgcHJpbnRmKCJcblZvd2VsczogJWQiLCByZXN1bHQudm93ZWxDb3VudCk7CiAgICBwcmludGYoIlxuTm9uLVZvd2VsczogJWQiLCByZXN1bHQubm9uVm93ZWxDb3VudCk7CiAgICBwcmludGYoIlxuSGV4IERpZ2l0czogJWQiLCByZXN1bHQuaGV4Q291bnQpOwogICAgcHJpbnRmKCJcbk9jdGFsIERpZ2l0czogJWQiLCByZXN1bHQub2N0YWxDb3VudCk7CiAgICBwcmludGYoIlxuQmluYXJ5IERpZ2l0czogJWQiLCByZXN1bHQuYmluYXJ5Q291bnQpOwogICAgcHJpbnRmKCJcblB1bmN0dWF0aW9uOiAlZCIsIHJlc3VsdC5wdW5jdENvdW50KTsKICAgIHByaW50ZigiXG5TcGVjaWFsIENoYXJhY3RlcnM6ICVkXG4iLCByZXN1bHQuc3BlY2lhbENoYXJDb3VudCk7CgogICAgcmV0dXJuIDA7Cn0KCnN0cnVjdCBzdHJpbmdTdGF0cyBnZXRTdHJpbmdTdGF0cyhjaGFyIHNbXSkKewogICAgc3RydWN0IHN0cmluZ1N0YXRzIHN0ID0gezB9OwogICAgaW50IGkgPSAwOwoKICAgIHdoaWxlKHNbaV0gIT0gJ1wwJykKICAgIHsKICAgICAgICBjaGFyIGMgPSBzW2ldOwogICAgICAgIHN0LnN0cmluZ0xlbmd0aCsrOwoKICAgICAgICBpZihpc3VwcGVyKGMpKSBzdC51cHBlckNhc2VDb3VudCsrOwogICAgICAgIGlmKGlzbG93ZXIoYykpIHN0Lmxvd2VyQ2FzZUNvdW50Kys7CiAgICAgICAgaWYoaXNkaWdpdChjKSkgc3QuZGlnaXRDb3VudCsrOwogICAgICAgIGlmKGlzc3BhY2UoYykpIHN0LnNwYWNlQ291bnQrKzsKICAgICAgICBpZighaXNhbG51bShjKSkgc3Qubm9uQWxudW1Db3VudCsrOwogICAgICAgIGlmKGlzY250cmwoYykpIHN0LmNvbnRyb2xDb3VudCsrOwogICAgICAgIGlmKGlzcHJpbnQoYykpIHN0LnByaW50YWJsZUNvdW50Kys7CgogICAgICAgIGlmKGlzYWxwaGEoYykpCiAgICAgICAgewogICAgICAgICAgICBjaGFyIGwgPSB0b2xvd2VyKGMpOwogICAgICAgICAgICBpZihsPT0nYSd8fGw9PSdlJ3x8bD09J2knfHxsPT0nbyd8fGw9PSd1JykKICAgICAgICAgICAgICAgIHN0LnZvd2VsQ291bnQrKzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3Qubm9uVm93ZWxDb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgaWYoaXN4ZGlnaXQoYykpIHN0LmhleENvdW50Kys7CiAgICAgICAgaWYoYyA+PSAnMCcgJiYgYyA8PSAnNycpIHN0Lm9jdGFsQ291bnQrKzsKICAgICAgICBpZihjID09ICcwJyB8fCBjID09ICcxJykgc3QuYmluYXJ5Q291bnQrKzsKICAgICAgICBpZihpc3B1bmN0KGMpKSBzdC5wdW5jdENvdW50Kys7CiAgICAgICAgaWYoaXNwdW5jdChjKSkgc3Quc3BlY2lhbENoYXJDb3VudCsrOwoKICAgICAgICBpKys7CiAgICB9CgogICAgcmV0dXJuIHN0Owp9Cg==