#include <stdio.h> #include <string.h> #define BUFF_SIZE 10 char * readline() { char *line = NULL; int i = 0; int length = 0; char c = 0; line = new char [BUFF_SIZE]; while(!feof(stdin)){ c = fgetc(stdin); if(c == '\n') break; if(i == length-1){ char *tmp = new char[length+BUFF_SIZE]; length += BUFF_SIZE; memcpy(tmp, line, length); line = tmp; } line[i] = c; i++; }; if(feof(stdin)) line[i-1] = 0; else line[i] = 0; return line; } bool test_palindrome(char *line) { unsigned int i=0; int line_len = strlen(line); for(i=0;i<strlen(line);i++){ if(line[i] != line[line_len-i-1]) return false; } return true; } char * reverse(char *line) { char *line_tmp = new char [strlen(line)+1]; memset(line_tmp, 0, strlen(line)+1); unsigned int i; for(i=0;i<strlen(line);i++){ switch(line[i]){ case 'A': case 'H': case 'I': case 'M': case 'O': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case '1': case '8': line_tmp[i] = line[i]; break; case 'E': line_tmp[i] = '3'; break; case 'J': line_tmp[i] = 'L'; break; case 'L': line_tmp[i] = 'J'; break; case 'S': line_tmp[i] = '2'; break; case 'Z': line_tmp[i] = '5'; break; case '2': line_tmp[i] = 'S'; break; case '3': line_tmp[i] = 'E'; break; case '5': line_tmp[i] = 'Z'; break; default: //printf("%c", line[i]); return NULL; break; } } int tmp = strlen(line); //printf("strlen(line)=%d\n",strlen(line)); //printf("strlen(line_tmp)=%d\n",strlen(line_tmp)); // printf("%s=%s", line, line_tmp); for(i=0;i<strlen(line);i++){ //printf("%c=%c", line[i], line_tmp[tmp-i-1]); if(line_tmp[i] != line_tmp[tmp-i-1]) return NULL; } return line_tmp; } int main(int argc, char *argv[]) { char *line, *tmp = NULL; unsigned int line_len; unsigned int i; bool is_palindrome=false, is_mirrored_string=false, is_mirrored_palindrome=false; int flags = 0; while(!feof(stdin)){ is_palindrome=false; is_mirrored_string=false; is_mirrored_palindrome=false; line = NULL; line = readline(); //printf("%s\n", reverse(line)); printf("%s", line); if(test_palindrome(line)==true) is_palindrome = true; if(reverse(line) != NULL) is_mirrored_string = true; if(is_palindrome==false && is_mirrored_string==false) printf(" -- is not a plaindrome.\n"); else if(is_palindrome && !is_mirrored_string) printf(" -- is a regular palindrome.\n"); else if(!is_palindrome && is_mirrored_string) printf(" -- is mirrored string.\n"); else if(is_palindrome && is_mirrored_string) printf(" -- is mirrored palindrome.\n"); if(feof(stdin)) { return 0; } } return 0; }