首页 > 代码库 > 在看到厄尔巴岛之前,我曾经不可一世

在看到厄尔巴岛之前,我曾经不可一世

题目描述

你应该听说过回文吧?所谓回文,简单地说,就是顺着读和反过来读都是一样的。中国历史上还出现过回文诗,其中大名鼎鼎的四首是:

莺啼岸柳弄春晴,柳弄春晴夜月明。 明月夜晴春弄柳,晴春弄柳岸啼莺。
香莲碧水动风凉,水动风凉夏日长。 长日夏凉风动水,凉风动水碧莲香。
秋江楚雁宿沙洲,雁宿沙洲浅水流。 流水浅洲沙宿雁,洲沙宿雁楚江秋。
红炉透炭炙寒风,炭炙寒风御隆冬。 冬隆御风寒炙炭,风寒炙炭透炉红。

咱们今天来一次“崇洋,但不媚外”。咱们暂时不考虑中文回文,而是考虑英文回文。简单的英文回文有:aba、madam等。我们现在给出回文的定义:滤去所有非字母字符(包括空格)后,不考虑字母的大小写,从左向右和从右向左读都一样的词、短语或句子。英文里面最有名的回文据说出自拿破仑同志之手:Able was I ere I saw Elba.意思是:在看到厄尔巴岛之前,我曾经不可一世。注:这里的ere是古字,现在偶尔还有人使用,和before(在……之前)同义,拿破仑同志对俄战争失败后被放逐到Elba岛。

输入

第一行为一个整数t,表示有t组测试数据。 接下来有t行,每行一个字符串。每个字符串一定含有字母字符。

输出

对于每个字符串,判断它是否是我们定义的回文串,如果是输出Yes,否则输出No。

样例输入

5
abc
Madam
Madam, I’m adam.
Golf, No Sir, prefer prison flog!
Able was I ere I saw Elba.

样例输出

No
Yes
Yes
Yes
Yes
#include <iostream> 
#include <cmath> 
#include <cstring> 
using namespace std; 
const int a = 100; 
char str[a+1]; 
char t[a+1]; 
int main() 
{ 
    int j=0,n,i,len,f; 
    cin >> n; 
    cin.get(); 
    while (n--) 
    { 
        char t[a+1]={0}; 
        f=1; 
        j=0; 
        cin.getline(str,a+1); 
       for (i=0;str[i]!='\0';i++) 
       { 
           if ( 
               (str[i]>='a'&&str[i]<='z') 
               ||(str[i]>='A'&&str[i]<='Z') 
               ) 
           { 
               t[j]=str[i]; 
               j++; 
           } 
       } 
      /*for (i=0;t[i]!='\0';i++) 
       { 
           cout << t[i] << endl; 
       } 
       */
       len=strlen(t); 
       for (i=0;i<len/2;i++) 
       { 
           if ((t[i]!=t[len-1-i])&&abs(t[i]-t[len-1-i])!=32) 
           { 
               f=0; 
           } 
       } 
       if (f==0) 
       { 
           cout << "No" << endl; 
       }  
       else
       { 
           cout << "Yes" << endl; 
       } 
  
    } 
    return 0; 
} 

在看到厄尔巴岛之前,我曾经不可一世