判断回文

  早上闲得无聊,写个判断回文的小程序,对于一个字符串,是否是回文,相信大家都知道。不过这个小demo可以清除混淆视听的字符,比如非字母,数字,清除空格然后再判断

  废话少说上代码

  

 1 #ifndef __PALINDROME_H
 2 #define __PALINDROME_H
 3 #include <string>
 4 #include <sstream>
 5 using std::string;
 6 using std::stringstream;
 7 //  string trim的简单高效实现
 8 string& LTrim(string& str) 
 9 { 
10     if (str.find_first_not_of(" 

	")!=string::npos){
11         str = str.substr(str.find_first_not_of(" 

	"));
12     }
13     return str;
14 } 
15 
16 string& RTrim(string& str) 
17 { 
18     if (str.find_first_not_of(" 

	")!=string::npos){
19         str = str.substr(0,str.find_last_not_of(" 

	")+1); 
20     }
21     return str;
22 } 
23 
24 string& trim(string& str) 
25 { 
26     return LTrim(RTrim(str));
27 }
28 
29 /************************************************************************/
30 /* 去除中间的一些非字符,和空格                                                                     */
31 /************************************************************************/
32 string pre_process(string tmp)
33 {
34     string pre_tmp=trim(tmp);
35     stringstream ss;
36     char c_tmp;
37     for (int i=0,end=pre_tmp.length();i<end;i++)
38     {
39         c_tmp=pre_tmp.at(i);
40         if (c_tmp>='A' && c_tmp<='Z')
41         {
42             c_tmp+=32;
43             ss<<c_tmp;
44         }
45         else if ((c_tmp>='0' && c_tmp<='9') || (c_tmp>='a' && c_tmp<='z'))
46             ss<<c_tmp;
47     }
48     string pos_tmp;
49     ss>>pos_tmp;
50     return pos_tmp;
51 }
52 /*
53 判断是否是回文  "A man, a plan, a canal: Panama" is a palindrome.
54 要清楚中间的非字母元素.空字符也可以的
55 */
56 bool is_palindrome(const string & str)
57 {
58     int len=str.length();
59     if (len<=1)
60         return true;
61     char left,right;
62     string pstr=pre_process(str);//这里可能会对string进行删减,所以要重新赋值
63     len=pstr.length();
64     for (int start=0,end=len-1;start<end;++start,--end)
65     {
66         left=pstr.at(start);
67         right=pstr.at(end);
68         if (left!=right)
69             return false;
70     }
71     return true;
72 }
73 
74 
75 #endif
View Code

至于怎么测相信就不用我来说了

原文地址:https://www.cnblogs.com/sandynie/p/3154170.html