NGQH123 2022-03-11 23:01 采纳率: 33.3%
浏览 75
已结题

回文序列-第四个测试点是什么

7-1 回文判断 (300 分)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。

输入格式:
输入待判断的字符序列,按回车键结束,字符序列长度<20。

输出格式:
若字符序列是回文,输出“YES”;否则,输出“NO”。

输入样例:
abdba
输出样例:
YES

代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define initSize 100
#define maxSize 20
typedef char Elemtype;
typedef struct {
Elemtype elem[20];
int top;//top 指向当前元素
int stackSize;
}SeqStack;
//创建于一个空栈
SeqStack* initStack ( ) {
SeqStack S=NULL;
S=(Elemtype
)malloc(initSize*sizeof(Elemtype));
S->top = -1;
S->stackSize = initSize;
return S;
}
//入栈,每次一个元素
void Push ( SeqStack *S, Elemtype x ) {
S->top++;
S->elem[S->top] = x;
}
//退栈,每次一个,返回相应的元素
Elemtype Pop ( SeqStack *S ) {
Elemtype x;
x = S->elem[S->top];
S->top--;
return x;
}

int main(){
SeqStack* S;
S=initStack();
char a[maxSize];
gets(a);
int len=0;
len=strlen(a);
if(len==1){
printf("YES");
return 0;
}
for(int i=0;i<len;i++){
Push(S,a[i]);
}
Elemtype index;
int flag=0;
for(int i=0;i<len/2;i++){
index=Pop(S);
if(a[i]==index)
flag=1;
else
flag=0;
}
if(flag)
printf("YES");
else
printf("NO");
return 0;
}

  • 写回答

3条回答 默认 最新

  • 关注

    主要是下面for循环那里逻辑有问题。其他地方还有一些零散的小问题。代码修改贴在下面了。

    img

    运行结果:

    img

    代码修改如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    //#define initSize 100
    #define maxSize 20
    typedef char Elemtype;
    typedef struct {
        Elemtype elem[maxSize];
        int top;//top 指向当前元素
        int stackSize;
    }SeqStack;
    //创建于一个空栈
    SeqStack* initStack ( ) {
        SeqStack* S=NULL;
        S=(SeqStack*)malloc(sizeof(SeqStack));
        S->top =0;
        S->stackSize = maxSize;
        return S;
    }
    //入栈,每次一个元素
    void Push ( SeqStack *S, Elemtype x ) {
        
        S->elem[S->top] = x;
        S->top++;
    }
    //退栈,每次一个,返回相应的元素
    Elemtype Pop ( SeqStack *S ) {
        Elemtype x;
        S->top--;
        x = S->elem[S->top];
        return x;
    }
    
    int main(){
        SeqStack* S;
        S=initStack();
        char a[maxSize];
        gets(a);
        int len=0;
        len=strlen(a);
        if(len==1){
            printf("YES");
            return 0;
        }
        for(int i=0;i<len;i++){
            Push(S,a[i]);
        }
        Elemtype index;
        int flag=1;
        for(int i=0;i<len/2;i++){
            index=Pop(S);
            if(a[i]!=index)
            {
                flag=0;
                break;
            }
        }
        if(flag)
            printf("YES");
        else
            printf("NO");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误
  • ¥15 Minifilter文件保护
  • ¥15 有限元软件终止时间超过设定值
  • ¥15 onvif框架引用一直报错
  • ¥50 C#和C++混合编程,使用CLR托管,报错System.Runtime.InteropServices.SEHException
  • ¥30 .NET使用sqlite发布后报错