码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-07 15:54:32      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:数据结构   算法   c++      

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

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

代码:

#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:技术分享

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

标签:数据结构   算法   c++      

原文地址:http://blog.csdn.net/u011421608/article/details/46400679

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!