/* * ispal -- determines if a string is a palindrome * it loops, reading strings, and checking each one * * Matt Bishop, ECS 36A * * October 18, 2019: wrote program */ #include #include /* * pal(char *s, int b, int e) * s is string containing string to check * check s[b]..s[e] to see if it's a palindrome * * returns 1 if s[b]..s[e]is a palindrome, 0 if not */ int pal(char *s, int b, int e) { int len; /* length of string to check */ /* get the length of the substring */ len = e - b + 1; /* base case, part 1: string is 0 or 1 long */ /* it's a palindrome if so */ if (len < 2) return(1); /* base case part 3: if chars at beginning, end */ /* of string are different, not a palindrome */ if (s[b] != s[e]) return(0); /* recursive case: if middle is a palindrome */ /* the whole thing is a palindrome */ return(pal(s, b+1, e-1)); } /* * the main routine */ int main(void) { char line[1024]; /* buffer to hold input line */ /* prompt the user for input */ printf("> "); /* * now loop reading input and checking it * quit when user types EOF */ while(fgets(line, 1024, stdin) != NULL){ /* clobber the trailing newline */ if (line[strlen(line)-1] == '\n') line[strlen(line)-1] = '\0'; /* now see if it's a palindrome */ if (pal(line, 0, strlen(line)-1)) printf("%s is a palindrome\n", line); else printf("%s is not a palindrome\n", line); /* prompt for more input */ printf("> "); } /* done -- skip to next line and then quit */ putchar('\n'); return(0); }