| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1281 人关注过本帖
标题:用栈实现行编辑程序-----检查没错,运行出错,大神帮忙看看
取消只看楼主 加入收藏
新手丶小方
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2016-11-28
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
用栈实现行编辑程序-----检查没错,运行出错,大神帮忙看看
/*用栈实现行编辑程序*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define STACK_SIZE 100
typedef struct
{
    char *base;
    char *top;
    int stacksize;
}SeqStack;

/*定义函数Initial(),实现构造栈 进栈 出栈 取栈顶元素 清空栈等 操作 */
void Initial(SeqStack *S)                              /*初始 化栈 */
{
    S->base=(char*)malloc(STACK_SIZE*sizeof(char));
    if(!S->base)
        exit(-1);
    S->top=S->base;
    S->stacksize=STACK_SIZE;
}
int IsEmpty(SeqStack*S)                                /*判断 栈空 */
{
    return S->top==S->top;
}
int IsFull(SeqStack*S)                                 /*判断 栈满 */
{
    return S->top-S->base==STACK_SIZE-1;
}
void Push(SeqStack *S,char x)                          /* 进     */
{
    if(IsFull(S))
    {
        printf("overflow");
        exit(1);
    }
    else
        *S->top++=x;   
}
void Pop(SeqStack *S)                                  /* 出     */   
{
    if(IsEmpty(S))
    {
        printf("NULL");
        exit(1);
    }
    else
        --S->top;
}
char Top(SeqStack *S)                                  /*取栈顶元素*/  
{
    if(IsEmpty(S))
    {
        printf("empty");
        exit(1);
    }
    return*(S->top-1);
}
void ClearStack(SeqStack*S)                            /*清空 栈   */
{
    S->top=S->base;
}

/*自定义函数LineEdit(),实现行编辑功能*/
void LineEdit(SeqStack *S)                   /*#号为退格符,为清空*/
{
    int i=0,a[100],n;/*定义变量数据为整型*/
    char ch;
    ch=getchar();    /*将输入字符赋给ch*/
    while(ch!='\n')
    {
        i++;         /*记录进栈元素个数*/
        switch(ch)   /*判断输入字符*/
        {
        case'#':   /*当输入字符为#时*/
            Pop(S);
            i-=2;  /*出栈 元素个数减少两个*/
            break;
        case'@':
            ClearStack(S);
            i=0;
            break;
        default:   /*元素不是#和@时,其余元素进行进栈操作*/   
            Push(S,ch);
        }
        ch=getchar();
    }
    for(n=1;n<=i;n++) /*将栈中元素存入数组中*/
    {
        a[n]=Top(S);
        Pop(S);
    }
    for(n=i;n<=1;n--)       /*将数组的元素输出*/
        printf("%c",a[n]);
}


/*main()函数作为程序的入口程序,调用LineEdit()函数实现简单的行编辑程序*/
void main()
{
    SeqStack *ST;
    printf("please input: \n");
    Initial(ST);
    LineEdit(ST);
}
搜索更多相关主题的帖子: include 元素 
2016-12-23 10:30
新手丶小方
Rank: 2
等 级:论坛游民
帖 子:16
专家分:18
注 册:2016-11-28
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-12-23 10:32
快速回复:用栈实现行编辑程序-----检查没错,运行出错,大神帮忙看看
数据加载中...
 
   



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

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