常见算法题:判断表达式是否是回文

来源:互联网 发布:淘宝客新增导购推广 编辑:程序博客网 时间:2024/05/16 07:41

题目:设计一个算法,判断用户输入的表达式中是否是回文(回文即左右对称的字符串)。

思路:这道题与判断表达式括号是否匹配类似,可使用顺序栈来解决,区别是回文要求每个字符都要求匹配,因此将字符串全部入栈,再全部出栈,将最后一个字符与第一个字符比较是否相同,依次比较,若全部相同则为回文。

代码:

#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:这里写图片描述

3 0