判断回文字符串 栈实现

初学栈,思想有点笨。想把字符串先存入字符串数组,然后挨个压入栈,然后每个字符在栈中弹出,这时数组逐渐输出每个字符,判断是否与之相等。

这样利用栈,实现了字符串的逆向输出,同起始的字符串进行比较,很容易判断出是否回文。

每次弹出栈首的字符,判断结束后都要将其删除,以便弹出下一个字符。


/*

使用标准库的栈和队列时,先包含相关的头文件
#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值