uva401--字符串

字符串反转的题,做两个判断

1、判断是否为回文串

2、判断是否为反转串

两种情况分开做都很简单,合并在一起也比较简单

注意:奇偶情况略有差别


//#define LOCAL #include #include #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; }

你可能感兴趣的:(uva401--字符串)