| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2245 人关注过本帖
标题:用栈来判断是否为回文的问题
只看楼主 加入收藏
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:4 
用栈来判断是否为回文的问题
具体题目:试写一个算法,识别依次读入的一个以“#”为结束符的字符序列是否为形如“序列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
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
程序代码:
while (str[i] != '\0'&&str[i] != '@')
    {
        e = str[i];
        Push(s, e);
        i++;
    }

早知做人那么辛苦!  当初不应该下凡
2017-10-18 00:43
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
收藏
得分:0 
回复 2楼 炎天
解决了,谢谢版主,能解释一下为什么要加这句话吗
2017-10-18 10:06
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:20 
回复 3楼 axxhn
char Push(SqStack *s,char e)//进栈
{
    if(s->top==MaxSize-1)
        return 1;
    else
    {
        s->top++;
        s->data[s->top]=e;
    }
    return 0;
}
那你这个自定义函数的意义呢?

早知做人那么辛苦!  当初不应该下凡
2017-10-18 13:11
axxhn
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2017-6-4
收藏
得分:0 
回复 4楼 炎天
好,我明白了,谢谢
2017-10-18 20:24
快速回复:用栈来判断是否为回文的问题
数据加载中...
 
   



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

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