番茄炒蛋1111 2022-04-02 16:36 采纳率: 70%
浏览 36
已结题

为什么这代码会有段错误

#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;
}

  • 写回答

1条回答 默认 最新

  • a5156520 2022-04-02 18:03
    关注

    把哪几个多余的#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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月13日
  • 已采纳回答 5月5日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么