练习问题来源
https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/01.04.html
要求:
判断一个字串是否是回文。
解法:
// -------------------回文判断 // 判断一个字串是否是回文 bool IsPalindrome0(const char *s, int n) { // 同时从字符串头尾开始向中间扫描字串,如果所有字符都一样,那么这个字串就是一个回文, // 采用这种方法只需要维护头部和尾部两个扫描指针即可 if (0 == s || n < 1) { return false; } const char *front, *back; // 指向常量 char 类型的指针, 指针可改变; "char const *front" 指针是常量, 不能改变必须初始化 front = s; back = s + n -1; while(front < back) { if(*front != *back) return false; else { ++front; --back; } } return true; } bool IsPalindrome1(const char *s, int n) { // 先从中间开始、然后向两边扩展查看字符是否相等 if (0 == s || n < 1) return false; const char *front, *back; front = s + n / 2 -1; back = s + (int)ceil(n / 2.0); while(front > s) { if(*front != *back) return false; else { --front; ++back; } } return true; }