手写栈:
#include<iostream>
#include<cstring>
using namespace std;
//搞一个栈结构体
struct stack{
int data[1000];
int top;
};
int main()
{
//定义栈,初始化栈顶
stack s;
s.top=0;
//定义并初始化需要判断的字符串
char str[1000];
cin>>str;
//拿到字符串长度,并找到字符串中点
int len=strlen(str);
int mid=len/2-1;
int i;
//循环将字符串前把那部分的值全部压入栈中
for(i=0;i<=mid;i++)
{
s.data[++s.top]=str[i];
}//因为当字符串为偶数时,mid+1就是后半段字符串,但是为奇数时,mid+2才是后半段字符串
if(len%2==1)
{
i++;
}
//开始循环依次出栈跟后续字符串比较即可
while(s.top!=0)
{
if(s.data[s.top--]!=str[i++])
{
break;
}
}
//如果没有比较到结尾,证明字符串不是回文
if(s.top==0)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
return 0;
}
STL容器:
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
stack<int >s;
char str[1000];
cin>>str;
int len=strlen(str);
int mid=len/2-1;
int i;
for(i=0;i<=mid;i++)
{
s.push(str[i]);
}
if(len%2==1)
{
i++;
}
while(!s.empty())
{
if(s.top()!=str[i++])
{
break;
}
s.pop();
}
if(s.empty())
{
cout<<"YES";
}
else
{
cout<<"NO";
}
return 0;
}