方法1>.使用栈进行判断,将字符串中的每个字符逐个放入栈中,全部放入之后再出栈,根据栈后进先出的特点,将最先出栈的元素与最先进栈的元素进行比较,如果它们相同则继续比较下去(不同则退出比较,说明不是回文),直到所有元素比较一谝或者最后仅剩一个单独元素未被比较,则说明字符串是回文。
代码如下:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int is_palindrome(const string palin)
{
stack<char> s;
for (int i = 0;i < palin.size();i++)
{
s.push(palin[i]);
}
int k = 0;
while (s.size() > palin.size()/2)
{
char c = s.top();
s.pop();
if (c != palin[k++])
{
cout << palin << " is not palindrome!" << endl;
return -1;
}
}
cout << palin << " is palindrome!" << endl;
return 0;
}
int main()
{
string str;
while (cin >> str)
is_palindrome(str);
return 0;
}
注意:
STL中 stack<int> s; 和 stack<int,vector<int> > s;的区别:
前者代表用默认的对象类型来实现一个栈(默认类型可以是vector, deque,list,一般推荐是vector、但默认是deque)
后者是要求用vector来创建栈。