迴文做word reverse,
鏡像先word reverse再letter reverse。
/* ACM 401 Palindromes * mythnc * 2011/11/07 16:22:59 * run time: 0.016 */ #include <stdio.h> #include <string.h> #define MAXCHAR 21 #define TRUE 1 #define FALSE 0 int reverse(char *, char *); int mirror(char *, char *); int valid(char, char *, int); int main(void) { char str[MAXCHAR], t[MAXCHAR]; while (scanf("%s", str) != EOF) if (reverse(str, t)) if (mirror(str, t)) printf("%s -- is a mirrored palindrome.\n\n", str); else printf("%s -- is a regular palindrome.\n\n", str); else if (mirror(str, t)) printf("%s -- is a mirrored string.\n\n", str); else printf("%s -- is not a palindrome.\n\n", str); return 0; } /* reverse: save the reverse of s in t, * if t and s are palindrome to each other, * return TRUE, else return FALSE */ int reverse(char *s, char *t) { int i, j; for (i = 0, j = strlen(s) - 1; i < strlen(s); i++, j--) t[i] = s[j]; t[i] = '\0'; if (strcmp(s, t) == 0) return TRUE; return FALSE; } /* mirror: if s is a mirror string * return TRUE, else return FALSE */ int mirror(char *s, char *t) { char map[21] = {'A', 'E', 'H', 'I', 'J', 'L', 'M', 'O', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '5', '8'}; char key[21] = {'A', '3', 'H', 'I', 'L', 'J', 'M', 'O', '2', 'T', 'U', 'V', 'W', 'X', 'Y', '5', '1', 'S', 'E', 'Z', '8'}; char m[MAXCHAR]; int index, i; for (i = 0; i < strlen(t); i++) if ((index = valid(t[i], map, 21)) >= 0) m[i] = key[index]; else return FALSE; m[i] = '\0'; if (strcmp(s, m) == 0) return TRUE; return FALSE; } /* valid: return the index of char c in map, * if c is a valid char, else return -1 */ int valid(char c, char *map, int n) { int i; for (i = 0; i < n; i++) if (c == map[i]) return i; return -1; }
沒有留言:
張貼留言