| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1052 人关注过本帖
标题:栈的应用--错误
只看楼主 加入收藏
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
 问题点数:0 回复次数:6 
栈的应用--错误
对string的用法不太清楚,用了strcmp也得不到结果
自己写了也总是输出1,我想应该是条件判断那儿,可是也不知道怎么改
栈的实现没问题,我试过了,麻烦大家看看我写的判等函数的条件
我的程序:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <iostream.h>
#include <string.h>
#define MAX 1000
#define TRUE 1
#define FALSE -1

#define STACK_INIT_SIZE 100//初始分配量
#define STACKINCREMENT 10//分配增量

typedef struct ///////定义结构
{
    char *base;
    char *top;
    char stacksize;
}SqStack;

void InitStack(SqStack &S)///初始化栈
{
    S.base=(char *)malloc(STACK_INIT_SIZE *sizeof(char));
    if(!S.base)exit(1);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}

int GetTop(SqStack &S,char &e)///获得栈顶元素
{
    if(S.top==S.base)return 0;
    e=*(S.top-1);
    return e;
}

void Push(SqStack &S,char e)///入栈
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        if(!S.base)exit(1);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top=e;
    S.top++;
}

int Pop(SqStack &S,char &e)///出栈
{
    if(S.top==S.base)exit(1);
    e=* --S.top;
    return e;
}
bool StackEmpty(SqStack &S)//判空
{
    if(S.base==S.top)return true;
    return false;
}



/*void Conversion()
{
    int N,e;
    SqStack S;
    InitStack(S);
    printf("input the number which you want to conver:");
    scanf("%d",&N);
    while(N)
    {
        Push(S,N%2);
        N=N/2;
    }
    while(!StackEmpty(S))
    {
        Pop(S,e);
        printf("%d",e);
    }
}*/

int Strequl(char str[],char str1[])
{
    int i,j;
//    int length0=strlen(str);
//    int length1=strlen(str1);
//    if(length0 != length1)return FALSE;
    for(i=0,j=0;str[i]!='\0' && str1[j]!='\0';i++ ,j++)//这儿的条件有问题吧,可是我不知道怎么改啊
    {
        if(str[i]!=str1[j])
            return FALSE;
    }
    return TRUE;
}
/*bool Strequl(char str[],char str1[])
{
    if(strcmp(str,str1)==0)
    {
        return true;
    }
    return false;
}*/

int Huiwen()
{
    int i;
    char ch;
    char str[MAX],str1[MAX];
    SqStack S;
    InitStack(S);
    printf("input your string:");
    gets(str);
    int length=strlen(str);
    for(i=0;i<length;i++)
        cout<<str[i];
    cout<<endl;
    int j=0;
//    char str1[length];
    for(i=0;i<=length;i++)
        Push(S,str[i]);
    while(!StackEmpty(S))
    {
        Pop(S,ch);
        str1[j]=ch;
        j++;
    }
    for(i=1;i<=length;i++)
        cout<<str1[i];
    cout<<endl;
//    getch();
//    cout<<strcmp(str,str1);
    cout<<Strequl(str,str1);
    return 0;
}

int main()
{
//    Conversion();
    Huiwen();
    return 0;
}
搜索更多相关主题的帖子: 应用 
2007-11-30 21:17
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
我想输出不就是1就是0如果是奇数的话,是1,如果是偶数的话,是0 因为 因为根本就没有入栈,只有最后一个数据入栈了,
我只是感觉你这个程序里,你的栈是满的,就指向STACK_INIT_SIZE 是100 所以返回也就是1了或0 ,
2007-11-30 22:01
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 
回复 2# 的帖子
不会吧
我把str和str1输出,str1的确是str的逆序啊
输入abaa,str1就是aaba啊
一判断就总是显示一个数了

上善若水,水善利万物而不争,处众人之所恶
2007-12-01 09:39
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
原帖由 [bold][underline]diaoxue[/underline][/bold] 于 2007-12-1 09:39 发表 [url=http://bbs.][/url]
不会吧
我把str和str1输出,str1的确是str的逆序啊
输入abaa,str1就是aaba啊
一判断就总是显示一个数了

你输入abaa
压到栈里就是'a','b','a','a','\0'
再从栈里pop到str1的时候
str1里的元素是'\0','a','a','b','a'
你打印str1时是从str1[1]开始的,所以能打印出aaba
而调用Strequl函数比较str和str1时
因为str1[0] = '\0',所以没有进入for循环
直接return TRUE; 去了

[[italic] 本帖最后由 succubus 于 2007-12-1 16:06 编辑 [/italic]]

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-12-01 16:05
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
打个断点单步跟一下很容易就找出错误来了

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-12-01 16:06
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 
回复 5# 的帖子

真是太谢谢你了
我刚知道单步跟踪
我正试着用

上善若水,水善利万物而不争,处众人之所恶
2007-12-02 00:06
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 
回复 4# 的帖子
我把循环中的j从1开始循环
问题就解决了

上善若水,水善利万物而不争,处众人之所恶
2007-12-05 21:20
快速回复:栈的应用--错误
数据加载中...
 
   



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

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