
Patrick B. answered 06/06/21
Math and computer tutor/teacher
#include <stdio.h>
#include <ctype.h>
#include <string.h>
typedef struct _TCharStats
{
char filename[255];
int numDigits;
int numUppercase;
int numLowerCase;
int numSpecialChars;
} * TCharStats;
#define CHAR_STATS_SIZE (sizeof(struct _TCharStats))
int CharStats( TCharStats charStats)
{
int iReturn=0;
char ch;
char filename[255];
/* opens the file */
strcpy(filename,charStats->filename);
FILE * fptr = fopen(charStats->filename,"r");
printf(" opening %s \n",filename);
/* then initializes the result structure by either doing this... */
charStats->numDigits = charStats->numLowerCase = charStats->numSpecialChars= charStats->numUppercase=0;
/* or this...*/
memset(charStats,0,CHAR_STATS_SIZE); /* filename clobbered */
if (fptr!=NULL) /* file open */
{
while (!feof(fptr)) /* while not end-of-file */
{
/* reads 1 character from the file and increments the appropriate statistic */
fscanf(fptr,"%c",&ch);
if (isdigit(ch)) { charStats->numDigits++; }
else
if (isupper(ch)) { charStats->numUppercase++; }
else
if (islower(ch)) { charStats->numLowerCase++; }
else
if (ch!=' ') { charStats->numSpecialChars++; }
} /* while */
fclose(fptr);
}
else /* file open FAIL */
{
printf(" error opening input file \n");
iReturn=-1;
}
strcpy(charStats->filename,filename); /* restores filename */
return(iReturn);
}
void CharStatsReport(TCharStats charStats, char * strMsg)
{
if (strMsg!=NULL)
{
printf("******************************************************************\n");
printf(strMsg);
}
printf("******************************************************************\n");
printf(" file name :> %s < \n" , charStats->filename);
printf(" # of upper case : %d \n",charStats->numUppercase);
printf(" # of lower case : %d \n", charStats->numLowerCase);
printf(" # of digits : %d \n",charStats->numDigits);
printf(" # if special chars : %d \n",charStats->numSpecialChars);
}
main()
{
struct _TCharStats charStats;
printf(" Filename ???? :>");
scanf("%s",charStats.filename);
CharStats(&charStats);
CharStatsReport(&charStats,NULL);
}