为什么这代码会有段错误

#include
#include
using namespace std;

#define OK 1
#define ERROR 0
#include
#include
#include
using namespace std;

//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef char SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

//算法3.1?顺序栈的初始化
Status InitStack(SqStack &S)
{// 构造一个空栈 S
S.base = new SElemType[MAXSIZE]; //为顺序栈分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit (OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//算法3.2?顺序栈的入栈
Status Push(SqStack &S,SElemType &e)
{ // 插入元素e为新的栈顶元素
if(S.top-S.base==S.stacksize)
return ERROR; //栈满
*(S.top++) = e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//算法3.3?顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.base == S.top)
return ERROR;//栈空
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
return OK;
}
//算法3.4?取顺序栈的栈顶元素
Status GetTop(SqStack S,SElemType &e)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top == S.base)
return ERROR;
e = *(S.top-1);//栈顶指针减1,将栈顶元素赋给e
return OK;
}

int isHuiwen(char *t, int len)
{//判断t字符串是否为回文,若是,返回1,否则返回0

    int i=0,j,f;
    char e;
    SqStack p;
    if(len%2==0){
        j=len/2;
        for(i=0;i<j;i++){
            Push(p,*(t+i));
        }
        for(;i<len;i++){
            if(Pop(p,e)){
                if(e==*(t+i)){
                    f=0;
                }
                else {
                    f=1;
                }
            }
        }
    }
    else{
        j=(len-1)/2;
        for(i=0;i<j;i++){
            Push(p,*(t+i));
        }
        i=i+1;
        for(;i<len;i++){
            if(Pop(p,e)){
                if(e==*(t+i)){
                    f=0;
                }
                else {
                    f=1;
                }
            }
        }
    } 
    if(f==1){
        return 0;
    }
    else return 1;

}
int main()
{
char str[105];
//cout<<"请输入一个字符串:"<<endl;
cin>>str;
int n = strlen(str);
cout<<(isHuiwen(str,n)?"Yes":"No")<<endl;
return 0;
}

把哪几个多余的#include 去掉,再加上strlen函数的头文件,#include <string.h> 后,测试发现代码可以正确判断回文数。


#include <iostream> 
#include <string.h>
using namespace std;

#define OK 1
#define ERROR 0

using namespace std;

//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef char SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;

//算法3.1?顺序栈的初始化
Status InitStack(SqStack &S)
{// 构造一个空栈 S
    S.base = new SElemType[MAXSIZE]; //为顺序栈分配一个最大容量为MAXSIZE的数组空间
    if(!S.base)
        exit (OVERFLOW); //存储分配失败
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return OK;
}
//算法3.2?顺序栈的入栈
Status Push(SqStack &S,SElemType &e)
{ // 插入元素e为新的栈顶元素
    if(S.top-S.base==S.stacksize)
        return ERROR; //栈满
    *(S.top++) = e; //元素e压入栈顶,栈顶指针加1
    return OK;
}
//算法3.3?顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    if(S.base == S.top)
        return ERROR;//栈空
    e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
    return OK;
}
//算法3.4?取顺序栈的栈顶元素
Status GetTop(SqStack S,SElemType &e)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
    if(S.top == S.base)
        return ERROR;
    e = *(S.top-1);//栈顶指针减1,将栈顶元素赋给e
    return OK;
}

int isHuiwen(char *t, int len)
{//判断t字符串是否为回文,若是,返回1,否则返回0

    int i=0,j,f;
    char e;
    SqStack p;
    if(len%2==0){
        j=len/2;
        for(i=0;i<j;i++){
            Push(p,*(t+i));
        }
        for(;i<len;i++){
            if(Pop(p,e)){
                if(e==*(t+i)){
                    f=0;
                }
                else {
                    f=1;
                }
            }
        }
    }
    else{
        j=(len-1)/2;
        for(i=0;i<j;i++){
            Push(p,*(t+i));
        }
        i=i+1;
        for(;i<len;i++){
            if(Pop(p,e)){
                if(e==*(t+i)){
                    f=0;
                }
                else {
                    f=1;
                }
            }
        }
    } 
    if(f==1){
        return 0;
    }
    else return 1;
}
int main()
{
    char str[105];
    //cout<<"请输入一个字符串:"<<endl;
    cin>>str;
    int n = strlen(str);
    cout<<(isHuiwen(str,n)?"Yes":"No")<<endl;
    return 0;
}