字符串反转的题,做两个判断
1、判断是否为回文串
2、判断是否为反转串
两种情况分开做都很简单,合并在一起也比较简单
注意:奇偶情况略有差别
//#define LOCAL
#include <stdio.h>
#include <string.h>
#define MAXN 20 + 10
char map[] = {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'
};
char reverse[] = {
'A',' ',' ',' ','3',' ',' ','H','I','L',' ','J','M',' ','O',' ',' ',' ','2','T','U','V','W','X','Y','5','1','S','E',' ','Z',' ',' ','8',' '
};
char str[MAXN];
int find(char ch);
void palindromes();
int main()
{
#ifdef LOCAL
freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
while(~scanf("%s", str))
{
// 算法主体
palindromes();
}
return 0;
}
void palindromes()
{
bool flag1 = true;// 回文串标志位
bool flag2 = true;// 反转串标志位
for(int i = 0; i < strlen(str) / 2 + 1; i++)
{
// 判断是否为镜像串
int index = find(str[i]);
char temp1 = reverse[index];
char temp2 = str[strlen(str) - 1 - i];
if(temp1 != temp2)
flag1 = false;
// 判断是否为回文串
if(str[i] != str[strlen(str) - 1 - i] && i != (strlen(str) - 1 - i))
flag2 = false;
}
if(flag1 && flag2)
printf("%s -- is a mirrored palindrome.\n\n", str);
else if(flag1)
printf("%s -- is a mirrored string.\n\n", str);
else if(flag2)
printf("%s -- is a regular palindrome.\n\n", str);
else
printf("%s -- is not a palindrome.\n\n", str);
}
int find(char ch)
{
int len = strlen(map);
for(int i = 0; i < len; i++)
if(map[i] == ch)
return i;
return -1;
}