标题:用栈来判断是否为回文的问题
取消只看楼主
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
结帖率:33.33%
已结贴  问题点数:20 回复次数:2 
用栈来判断是否为回文的问题
具体题目:试写一个算法,识别依次读入的一个以“#”为结束符的字符序列是否为形如“序列1@序列2”模式的字符序列。其中序列1和序列2中都不含字符“@”,且序列2是序列1的逆序列。例如,“a+b@b+a”是属于该模式的字符序列,而“1+3@3-1”则不是。
现在的问题就是除了输入“@”是yes,输入其他的输出都是no,找不出是什么原因,希望各位大神能帮我看看
我写的代码如下
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 100
struct SqStack
{
    char data[MaxSize];
    int top; //栈顶指针
};

void InitStack(SqStack *&s)//初始化栈
{
    s=(SqStack *)malloc(sizeof(SqStack));
    s->top=-1;
}
char Push(SqStack *s,char e)//进栈
{
    if(s->top==MaxSize-1)
        return 1;
    else
    {
        s->top++;
        s->data[s->top]=e;
    }
    return 0;
}
char Pop(SqStack *s)//出栈
{
    return(s->data[s->top--]);
}
int main()
{
    int i=0;
    char e;
    SqStack *s;
    char str[MaxSize];
    InitStack(s);
    printf("请输入一个字符串:\n");
    scanf("%s",&str);
    // 先将‘@’前的字母入栈
    while(str[i]!='\0'&&str[i]!='@')
    {
        Push(s,e);
        i++;
    }
    // 如果字符串中 没有出现 ‘@’返回no
    if(str[i]=='\0')
    return (printf("no"));
    i++;// i 定位到 & 后面第一个字符处
    while(str[i]!='\0'&&s->top!=-1)
    {
        char data=Pop(s);
        if(data==str[i])
        i++;
        else return (printf("no"));
    }
    // 如果正好相同就返回yes
    if(str[i]=='\0'&&s->top==-1)
    return (printf("yes"));
    else return (printf("no"));
}

搜索更多相关主题的帖子: 序列 str char top return 
2017-10-17 23:01
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
得分:0 
回复 2楼 炎天
解决了,谢谢版主,能解释一下为什么要加这句话吗
2017-10-18 10:06
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
得分:0 
回复 4楼 炎天
好,我明白了,谢谢
2017-10-18 20:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481504-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.222401 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved