//回文数
#include<iostream>
#include<string>
using namespace std;
template<class T>
struct Node
{
T data;
Node<T> *next;
};
template<class T>
class linkstack
{
Node<T> *top;
public:
linkstack() { top = NULL; }
~linkstack();
void push(T x);
T pop();
bool empty() { return top == NULL; }
};
template<class T>
linkstack<T>::~linkstack()
{
Node<T> *p = top;
while (p)
{
Node<T> *q;
q = p;
p = p->next;
delete q;
}
top = NULL;
}
template<class T>
void linkstack<T>::push(T x)
{
Node<T> *p = new Node<T>;
p->data = x;
p->next = top;
top = p;
}
template<class T>
T linkstack<T>::pop()
{
if (top == NULL)
{
cout << "下溢" << endl;
exit(1);
}
T x;
Node<T> *p = top;
x = p->data;
top = top->next;
delete p;
return x;
}
class palindrome
{
char *str;
public:
palindrome(char *a)
{
str = new char[strlen(a) + 1];
strcpy(str, a);
}
bool palindromejudge();//判别
void setstring(char *a);//重新设置字符串
void output() { cout << str << endl; }//输出
};
bool palindrome::palindromejudge()
{
linkstack<char> s;
char *p = str;
while (*p)
s.push(*p++);
p = str;
while (!s.empty())
{
if (s.pop() != *p)
return false;
p++;
}
return true;
}
int main()
{
char s[20];
cout << "请输入待判别字符串:";
cin.getline(s, 20);
palindrome pa(s);
if (pa.palindromejudge() == true)
cout << "字符串" << s << "是回文!" << endl;
else
cout << "字符串" << s << "不是回文!" << endl;
system("pause");
}
测试结果: