C和指標--編程題9.14第10小題--判斷迴文函數

來源:互聯網
上載者:User

標籤:span   std   rom   lin   eve   har   ring   clu   返回   

題目:

編寫函數

  int palindrom( char *string);

如果參數字串是個迴文,函數就返回真,否則就返回假。迴文就是指一個字串從左向右讀和從右向左讀是一樣的。函數應忽略所有的非字母字元,而且在進行字元比較時不用區分大小寫。

前提是空白字元、標點符號和大小寫狀態被忽略,當Adam第1次遇到Eve時他可能會說的一句話:“Madam,I‘m Adam”就是迴文一例。

分析題目,題目中沒有規定Null 字元串和全是非字母字元的情況是否屬於迴文,我私自將Null 字元串歸為迴文,將全是非字母字元歸為非迴文,palindrom函數的編碼實現思路如下:

  1. 當 strlen(string) <= 1。如果string的長度為0,則返回true;如果string的長度為1,如果是字母字元,返回true;否則返回false。
  2. 當strlen(string) >=2。

使用指標p指向字串末尾,從兩端(string指標從前到後,p指標從後向前)比較字母字元,*string和*p在都是字母字元的情況下,要麼是相等關係,要麼是大小寫關係,一旦不符合迴文條件則立馬返回false。

根據思路編寫代碼如下,並使用“Madam,I‘m Adam”通過了測試。

 1 #include<iostream> 2 #include<string.h> 3 const static int BUFF_SIZE = 50; 4 bool palindrome(char * str); 5 int main(int argc, char *argv[]) 6 { 7     char str[BUFF_SIZE]; 8     std::cout<<"enter a char[]: "<<std::endl; 9     std::cin.getline(str, BUFF_SIZE);10     std::cout<<"str: "<<str<<std::endl;11     if(palindrome(str))12     {13         std::cout<<"\""<<str<<"\" is a palindrome\n";14     }15     else16     {17         std::cout<<"\""<<str<<"\" is not a palindrome\n";18     }19     return 0;20 }21 bool palindrome(char * str)22 {23     if(strlen(str) == 0)24     {25         std::cout<<"it is a null string\n";26         return true;27     }28     if(strlen(str) == 1)29     {30         if(isalpha(*str))31         {32             return true;33         }34         else35         {36             std::cout<<"it has no alpha\n";37             return false;38         }39     }40     char * p = str;41     while(‘\0‘ != *(++p))42     {43        // p++;44     }45     p--;46     while(str < p)47     {48         while(!isalpha(*str))49         {50             if(‘\0‘ == *str)51             {52                 std::cout<<"it has no alpha\n";53                 return false;54             }55             ++str;56         }57         while(!isalpha(*p))58         {59             --p;60         }61         if(islower(*str))62         {63             if((*p == *str) || (*p == *str - 32))64             {65                 ++str;66                 p--;67             }68             else69             {70                 return false;71             }72         }73         else74         {75             if((*p == *str) || (*p == *str + 32))76             {77                 ++str;78                 --p;79             }80             else81             {82                 return false;83             }84         }85     }86 }

 

C和指標--編程題9.14第10小題--判斷迴文函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.