2010-07-03 68 views
0

我想写一个方法来确定给定的字符串是否是回文。例如。 “女士我是亚当”,或者“一个男人,一个计划,一条运河,巴拿马”。C++编码逻辑 - 各种想法

的原型的功能是:

bool is_palindrome(char const * str) 

我有一个简单的逻辑通过从字符串的最末端后向前进&以检查是否相等。但是,我想知道有多少有效的方法来做到这一点?所有的想法都欢迎来自C++大师。

+0

有http://stackoverflow.com/questions/248161/palindrome-detection-efficiency和http://stackoverflow.com/questions/228518/palindrome-golf。可能的重复? – pmr 2010-07-03 11:17:44

+0

请注意,如果严格忽略空格,标点符号和大写字母(几乎通用的条件,BTW),那么这两个示例都只是回文。这将如何影响你的方法?是否值得实施其中一项或多项变体的代码?你会怎么做?你能为所有可能的组合提供一个干净的界面吗?一旦你这样做了,*然后*你明白你的问题。干杯。 – dmckee 2010-07-03 22:58:29

回答

1

我不认为有一种更有效的方法,你必须比较字符串中的每个字符。

可能的优化:您只需检查字符串的前半部分,并且一旦发现不匹配就可以尽早突破。

bool is_palindrome(char const * str) 
{ 
    size_t len = strlen(str); 
    bool isPalindrome = false; // It's debatable if a blank string is a palindrome or not 

    for(int i = 0; i < len/2; i++) 
    { 
     if(str[i] != str[len - i - 1]) 
     { 
      isPalindrome = false; 
      break; 
     } 
     isPalindrome = true; 
    } 

    return isPalindrome; 
} 
+0

如果源代码使用两个指针而不是数组索引器,则编译代码可能更紧密;例如'if(* startPtr ++!= * endPtr--){...}' – ChrisW 2010-07-03 11:55:47