题目:设计一个算法,判断用户输入的表达式中是否是回文(回文即左右对称的字符串)。
思路:这道题与判断表达式括号是否匹配类似,可使用顺序栈来解决,区别是回文要求每个字符都要求匹配,因此将字符串全部入栈,再全部出栈,将最后一个字符与第一个字符比较是否相同,依次比较,若全部相同则为回文。
代码:
#include<iostream>
#include<string>
using namespace std;
#define MaxSize 20
//字符串栈
class Stack
{
char *data;
int top;
public:
Stack();
~Stack();
bool IsEmpty();
bool Push(char e);
bool Pop(char& e);
};
Stack::Stack()
{
data = new char[MaxSize];
top = -1;
}
Stack::~Stack()
{
delete [] data;
}
bool Stack::IsEmpty()
{
return (top == -1);
}
bool Stack::Push(char e)
{
if(top == MaxSize-1) return false; //栈满
top++;
data[top] = e;
return true;
}
bool Stack::Pop(char& e)
{
if(top == -1) return false; //栈空
e = data[top];
top--;
return true;
}
//判断回文
bool IsPalindrome(char str[],int n)
{
int i=0;char e;
Stack st;
while(i<n)
{
st.Push(str[i]);
i++;
}
i=0;
while(i<n)
{
st.Pop(e);
if(str[i]!=e) return false;
i++;
}
return true;
}
void main()
{
cout<<"请输入表达式:"<<endl;
char str[MaxSize];
cin>>str;
int n = strlen(str);
if(IsPalindrome(str,n))
cout<<"表达式"<<str<<"是回文"<<endl;
else
cout<<"表达式"<<str<<"不是回文"<<endl;
}
测试数据1:qwerewq
测试结果1:
测试数据2:qwertyu
测试结果2:
时间: 2024-11-10 07:11:07