很蛋疼的一道题(我认为字符串的题一向如此)。此题是求回文字符串和镜像字符串两种。我们应该知道对于一串长度是len字符串来说。位置 i 所对应的的位置是len - i - 1 。
用pa函数计算是否是palindrome。用ma计算是否是mirrored。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char al[27]={"A 3 HIL JM O 2TUVWXY5"};
char num[10]={"1SE Z 8 "};
int pa ( char s[] ) {
int len = strlen ( s );
for ( int i = 0; i < len; ++i )
if ( s[i] != s[len - i - 1] ) return 0;
return 1;
}
int mir ( char s[] ) {
int len = strlen ( s );
for ( int i = 0; i < len; ++i ) {
if ( isalpha ( s[i] ) ) {
if ( al[s[i] - 'A'] != s[len - i - 1] ) return 0;
}
if ( isdigit ( s[i] - '1' ) ) {
if ( num[s[i] - '1'] != s[len - i -1] ) return 0;
}
}
return 1;
}
int main ( ) {
char str[1001];
while ( gets ( str ) ) {
if ( pa ( str ) == 0 && mir ( str ) == 0 ) printf( "%s -- is not a palindrome.\n\n", str );
if ( pa ( str ) && ( mir ( str ) == 0 ) ) printf( "%s -- is a regular palindrome.\n\n", str );
if ( ( pa ( str ) == 0 ) && mir ( str ) ) printf( "%s -- is a mirrored string.\n\n", str );
if ( pa ( str ) && mir ( str ) ) printf( "%s -- is a mirrored palindrome.\n\n", str );
}
return 0;
}