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.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
主要考察, cctype.h 的使用:
可能用到的函数: tolower, toupper, isalpha, isdigit, isalnum。
1 class Solution { 2 public: 3 bool isPalindrome(string s) { 4 int left=0,right =s.size()-1; 5 while(left<right) 6 { 7 if(!isalnum(s[left])) 8 left++; 9 else if(!isalnum(s[right])) 10 right--; 11 else 12 { 13 if(tolower(s[left])==tolower(s[right])) 14 { 15 left++; 16 right--; 17 } 18 else 19 return false; 20 } 21 } 22 return true; 23 } 24 };
可能用到的函数: tolower, toupper, isalpha, isdigit, isalnum。
补充知识: cctype 库文件(参考cplusplus: http://www.cplusplus.com/reference/cctype/ )
函数名 | function description | 函数说明 |
isalnum | Check if character is alphanumeric (function ) | 查看参数是否为字符或数字 |
isalpha | Check if character is alphabetic (function ) | 查看参数是否为字符 |
isblank | Check if character is blank (function ) | 查看参数是否为空格 |
iscntrl | Check if character is a control character (function ) | 查看参数是否为控制字符 |
isdigit | Check if character is decimal digit (function ) | 查看参数是否为十进制数字 |
isgraph | Check if character has graphical representation (function ) | 查看参数是否为可显示字符 |
islower | Check if character is lowercase letter (function ) | 查看参数是否为可打印字符 |
isprint | Check if character is printable (function ) | 查看参数是否为小写字符 |
ispunct | Check if character is a punctuation character (function ) | 查看参数是否为标点符号 |
isspace | Check if character is a white-space (function ) | 查看参数是否为空字符 |
isupper | Check if character is uppercase letter (function ) | 查看参数是否为大写字符 |
isxdigit | Check if character is hexadecimal digit (function ) | 查看参数是否为十六进制数字 |
具体的ASCII 与 cctype各函数的对应关系如下表:
ASCII values | characters | iscntrl | isblank | isspace | isupper | islower | isalpha | isdigit | isxdigit | isalnum | ispunct | isgraph | isprint |
x00 .. 0x08 | NUL, (other control codes) | x | |||||||||||
0x09 | tab ('\t') | x | x | x | |||||||||
0x0A .. 0x0D | (white-space control codes:'\f','\v','\n','\r') | x | x | ||||||||||
0x0E .. 0x1F | (other control codes) | x | |||||||||||
0x20 | space (' ') | x | x | x | |||||||||
0x21 .. 0x2F | !"#$%&'()*+,-./ | x | x | x | |||||||||
0x30 .. 0x39 | 123456789 | x | x | x | x | x | |||||||
0x3a .. 0x40 | :;<=>?@ | x | x | x | |||||||||
0x41 .. 0x46 | ABCDEF | x | x | x | x | x | x | ||||||
0x47 .. 0x5A | GHIJKLMNOPQRSTUVWXYZ | x | x | x | x | x | |||||||
0x5B .. 0x60 | [\]^_` | x | x | x | |||||||||
0x61 .. 0x66 | abcdef | x | x | x | x | x | x | ||||||
0x67 .. 0x7A | ghijklmnopqrstuvwxyz | x | x | x | x | x | |||||||
0x7B .. 0x7E | {|}~ | x | x | x | |||||||||
0x7F | (DEL) | x |
转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!