Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
“A man, a plan, a canal: Panama” is a palindrome.
“race a car” is not a palindrome.
说明:先遍历字符串,将所有的大写字母转换为小写字母;再将串首和串尾字符(英文字符或数字字符)依次比较,直到首尾指针指向同一地址。
代码:
bool isPalindrome(char* s) {
if(strlen(s) <= 1) return true;
char *p = s;
while(*p != '\0')
{
if(isupper(*p))
*p = tolower(*p);
p++;
}
printf("%s\n", s);
p--;
while(s < p)
{
if(((*s <= 'z' && *s >= 'a') || (*s >= '0' && *s <= '9')) && ((*p <= 'z' && *p >= 'a') || (*p >= '0' && *p <= '9')))
{
if(*s == *p)
{
s++;
p--;
}
else
return false;
}
else if((*s <= 'z' && *s >= 'a') || (*s >= '0' && *s <= '9'))
p--;
else if((*p <= 'z' && *p >= 'a') || (*p >= '0' && *p <= '9'))
s++;
else
{
s++;
p--;
}
}
return true;
}