【题目描述】
输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
【输入】
输入为一行字符串(字符串中没有空白字符,字符串长度不超过100)。
【输出】
如果字符串是回文,输出yes;否则,输出no。
【输入样例】
abcdedcba
【输出样例】
yes
解法一:
#include <iostream>
#include <cstring>
using namespace std;
char a[105];
int main(){
cin >> a;
int i = 0;
int len = strlen(a);
int j = len - 1;
while(i < j){
if(a[i] == a[j]){
i ++;
j --;
}else{
cout << "no";
return 0;
}
}
cout << "yes";
return 0;
}
解法二:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[101],b[101];
gets(a);
int len=strlen(a);
int q=0;
for (int i=len-1; i>=0; i--) //遍历数组a 把数反向存入b数组
{
b[q]=a[i];
q++;
}
for(int i=0;i<len;i++) //正向挨个比较数组a b 如有一个不同则不是回文 输出no结束程序
{
if(a[i]!=b[i])
{
cout<<"no";
return 0;
}
}
cout<<"yes";
return 0;
}
解法三:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[101];
gets(a); //输入数组a
int i,j=strlen(a)-1; //i从头开始 j从最后数组一个元素开始 首尾同时向中间判定
for(i=0;i<j ;i++) //当i<j的时候循环
{
if(a[i]==a[j]) //当头尾两个相同时
{
j--; //往两边都中间移一位
}
else
break; //不相等则提前结束
}
/*
while( (i<j) &&(a[i]==a[j]) ) 或用while写法
{
i++;
j--;
}
*/
if(i>=j) //若提前结束则 i<j 没有提前结束则i大于等于j
cout<<"yes";
else
cout<<"no";
return 0;
}