/*
***************************************************************************
* Filename: 401.c
*
* Description:
*
* Version: 0.1
* Created: 4/7/2009 9:33:43 PM
*
* Author: Ye Xiaofeng, yexfeng # gmail.com
*
***************************************************************************
*/
#include <stdio.h>
typedef struct {
char c;
char r_c;
} reverse_entry;
reverse_entry reverse_table[17] = {
{ 'A', 'A' },
{ 'E', '3' },
{ 'H', 'H' },
{ 'I', 'I' },
{ 'J', 'L' },
{ 'M', 'M' },
{ 'O', 'O' },
{ 'S', '2' },
{ 'T', 'T' },
{ 'U', 'U' },
{ 'V', 'V' },
{ 'W', 'W' },
{ 'X', 'X' },
{ 'Y', 'Y' },
{ 'Z', '5' },
{ '1', '1' },
{ '8', '8' }
};
int find_reverse(char c);
int is_mirror_str(char *str);
int is_palindrome_str(char *str);
int main(int argc, char **argv)
{
char line_buffer[21];
char *p_buffer = NULL;
int val = 0;
p_buffer = gets(line_buffer);
while (p_buffer != NULL) {
val = 0;
if (is_mirror_str(line_buffer)) {
val |= 1;
}
if (is_palindrome_str(line_buffer)) {
val |= 2;
}
switch (val) {
case 0:
printf("%s -- is not a palindrome.\n", line_buffer);
break;
case 1:
printf("%s -- is a mirrored string.\n", line_buffer);
break;
case 2:
printf("%s -- is a regular palindrome.\n", line_buffer);
break;
case 3:
printf("%s -- is a mirrored palindrome.\n", line_buffer);
break;
}
printf("\n");
p_buffer = gets(line_buffer);
}
}
int find_reverse(char c)
{
int i = 0;
for (i = 0; i < 17; i++) {
if (reverse_table[i].c == c) {
return reverse_table[i].r_c;
}
if (reverse_table[i].r_c == c) {
return reverse_table[i].c;
}
}
return 0;
}
int is_mirror_str(char *str)
{
int len = strlen(str);
char *l = str;
char *r = str + len - 1;
while (l <= r) {
if (find_reverse(*l) != *r) {
return 0;
}
l++;
r--;
}
return 1;
}
int is_palindrome_str(char *str)
{
char *l = str;
int len = strlen(str);
char *r = str + len - 1;
while (l < r) {
if (*l != *r) {
return 0;
}
l++;
r--;
}
return 1;
}
|