Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71292
  • 博文数量: 41
  • 博客积分: 1475
  • 博客等级: 上尉
  • 技术积分: 440
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 22:49
文章分类
文章存档

2012年(8)

2011年(1)

2009年(32)

我的朋友
最近访客

分类:

2009-04-16 20:27:45

/*
 ***************************************************************************
 * 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;
}

阅读(306) | 评论(0) | 转发(0) |
0

上一篇:ACM UVA (403)

下一篇:ACM UVA (400)

给主人留下些什么吧!~~