判斷迴文字串 棧實現
初學棧,思想有點笨。想把字串先存入字串陣列,然後挨個壓入棧,然後每個字元在棧中彈出,這時陣列逐漸輸出每個字元,判斷是否與之相等。
這樣利用棧,實現了字串的逆向輸出,同起始的字串進行比較,很容易判斷出是否迴文。
每次彈出棧首的字元,判斷結束後都要將其刪除,以便彈出下一個字元。
/*
使用標準庫的棧和佇列時,先包含相關的標頭檔案
#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;
}