你应该听说过回文吧?所谓回文,简单地说,就是顺着读和反过来读都是一样的。中国历史上还出现过回文诗,其中大名鼎鼎的四首是:
春
莺啼岸柳弄春晴,柳弄春晴夜月明。 明月夜晴春弄柳,晴春弄柳岸啼莺。
夏
香莲碧水动风凉,水动风凉夏日长。 长日夏凉风动水,凉风动水碧莲香。
秋
秋江楚雁宿沙洲,雁宿沙洲浅水流。 流水浅洲沙宿雁,洲沙宿雁楚江秋。
冬
红炉透炭炙寒风,炭炙寒风御隆冬。 冬隆御风寒炙炭,风寒炙炭透炉红。
咱们今天来一次“崇洋,但不媚外”。咱们暂时不考虑中文回文,而是考虑英文回文。简单的英文回文有: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;
}