zoukankan      html  css  js  c++  java
  • 判断回文

      早上闲得无聊,写个判断回文的小程序,对于一个字符串,是否是回文,相信大家都知道。不过这个小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

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

  • 相关阅读:
    每日编程-20170322
    每日编程-20170321
    C++primer拾遗(第七章:类)
    每日编程-20170320
    uniApp之 顶部选项卡
    vue 服务端渲染 vs 预渲染(1)
    uni-app学习笔记
    如何解决vue跨域的问题
    简单整理数组的用法
    vue-cli
  • 原文地址:https://www.cnblogs.com/sandynie/p/3154170.html
Copyright © 2011-2022 走看看