初学栈,思想有点笨。想把字符串先存入字符串数组,然后挨个压入栈,然后每个字符在栈中弹出,这时数组逐渐输出每个字符,判断是否与之相等。
这样利用栈,实现了字符串的逆向输出,同起始的字符串进行比较,很容易判断出是否回文。
每次弹出栈首的字符,判断结束后都要将其删除,以便弹出下一个字符。
/*
使用标准库的栈和队列时,先包含相关的头文件
#include<stack>
#include<queue>
定义栈如下:
stack<int> stk;
定义队列如下:
queue<int> q;
栈提供了如下的操作
[cpp] view plain copy
s.empty() 如果栈为空返回true,否则返回false
s.size() 返回栈中元素的个数
s.pop() 删除栈顶元素但不返回其值
s.top() 返回栈顶的元素,但不删除该元素
s.push() 在栈顶压入新元素
*/
#include<iostream>
#include<stack>
#include<string.h>
#include<string>
using namespace std;
string a; //定义字符串
int main()
{
stack <char> s; //定义栈
int i,j,flag=0;
char c;
a.clear(); //清空字符串,虽然不是很有用
cin>>a;
getchar(); //接受空格
for(i=0;a[i]!='\0';i++) //每个字符逐个入栈
s.push(a[i]);
while(!s.empty()) //当非空栈
{
for(j=0;a[j]!='\0';j++) //逐个判断
{
c=s.top(); //接受栈首字符
if(c!=a[j]) //不相同
{
flag=1; //标记
cout<<"NO"<<endl;
return 0;
}
s.pop(); //删除栈首
}
}
if(!flag) //未被标记
cout<<"YES"<<endl;
return 0;
}