1. 程式人生 > >判斷迴文字串 棧實現

判斷迴文字串 棧實現

初學棧,思想有點笨。想把字串先存入字串陣列,然後挨個壓入棧,然後每個字元在棧中彈出,這時陣列逐漸輸出每個字元,判斷是否與之相等。

這樣利用棧,實現了字串的逆向輸出,同起始的字串進行比較,很容易判斷出是否迴文。

每次彈出棧首的字元,判斷結束後都要將其刪除,以便彈出下一個字元。

/*

使用標準庫的棧和佇列時,先包含相關的標頭檔案
#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;
}