回文串


輸入一個字符串,判斷它是否為回文串(palindrome)以及鏡像串(mirror)。 輸入字符串保證不含數字0。 所謂回文串,就是反轉以后和原串相同,如abba和madam。 所謂鏡像串,就是左右鏡像之后和原串相同,如2S和3AIAE。 注意,並不是每個字符在鏡像之后都能得到一個合法字符,比如B。

A-Z和數字1-9的鏡像如下:"A   3  HIL JM O   2TUVWXY51SE Z  8 ",對於沒有合法的鏡像字符用空白字符表示


 

對於回文串還是比較容易去驗證的,從字符數組的兩端開始向中間靠攏去驗證字符是否相等,但這里是否需要考慮字符數組長度的奇偶性呢?其實是不用的,因為奇數長度的數組中間那個數不用管,所以還是當偶數看待就行了;對於鏡像串需要做些小的轉換,因為獲取數組某一個位置的字符需要用到數字類型的index,所以首先需要將字符轉換到在字符集中的相對位置

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define maxn 20
const char* rev = "A 3 HIL JM O 2TUVWXY51SE Z 8 "; const char* msg[] = { "neither", "only p", "only m", "both" }; char r(char ch); int main() { char s[30]; while (scanf("%s", s) == 1) { int len = strlen(s); int p = 1, m = 1; for (int i=0; i<len/2; i++) { if (s[i] != s[len-1-i]) p = 0; if (r(s[i]) != s[len-1-i]) m = 0; } printf("%s is %s\n", s, msg[m*2+p]); } return 0; } // 因為字符集中字符是連續的因此可以用這種方式去計算相對位置 char r(char ch) { if (isalpha(ch)) return rev[ch-'A']; return rev[ch-'0'+25]; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM