#include #include #include #include #ifndef LENGTH #define LENGTH 30 #endif #define ZERO '0' void read_string(char *str); char read_char(char *prompt); int check_bounds(char lower, char upper); int count_digits(char *str, char lower, char upper); int main(void) { char str[LENGTH]; char lower; char upper; read_string(str); lower = read_char("Lower Bound (0-9): "); upper = read_char("Upper Bound (0-9): "); assert(check_bounds(lower, upper)); int count = count_digits(str, lower, upper); printf("The String contains %d digits between %c and %c, inclusive.\n", count, lower, upper); return 0; } void read_string(char *str) { printf("String? "); char *rtn = fgets(str, LENGTH, stdin); if (rtn == NULL) { printf("Error\n"); } } char read_char(char *prompt) { printf("%s", prompt); char rtn = getchar(); char ch; while ((ch = getchar()) != '\n') { ; //do nothing } return rtn; } int check_bounds(char lower, char upper) { if (isdigit(lower) && isdigit(upper)) { int l = lower - ZERO; int u = upper - ZERO; return (l <= u); } return 0; } int count_digits(char *s, char lower, char upper) { int count = 0; for (; *s != '\0'; s++) { if (*s >= lower && *s <= upper) count++; } return count; }