请教大神:行编辑程序错在哪儿,找了好久都没找到。

风吹得好舒服 2013-04-05 04:50:26
#define stack_init_size 1000
#include"iostream"
using namespace std;


struct Stack{
char *base;
char *top;
int stacksize;
};
Stack s;

//初始化一个空栈
int initStack(Stack &s)
{
s.base=(char *)malloc(stack_init_size*sizeof(char));
if(!s.base)
return 0;
s.top=s.base;
s.stacksize=stack_init_size;
return 1;
}


//出栈
int Pop(Stack &s,char &e)
{
if(s.top==s.base)
return 0;
e=*--s.top;
return 1;
}


//入栈
int Push(Stack &s,char e)
{
*s.top++=e;
return 1;
}


//清空栈
int ClearStack(Stack &s)
{
s.top=s.base;
return 0;
}


//销毁栈
void destroyStack(Stack &s)
{

free(s.base);
s.top=s.base=NULL;
s.stacksize=0;
}


//判断是否为空
int EmptyStack(Stack s)
{
if(s.top==s.base)
return 1;
return 0;
}


//输出字符
int visit(char e)
{
cout<<e;
return 1;
}

//倒序输出
int StackTraverse(Stack &s,int(* visit)(char))
{
while(s.base<=s.top)
{
visit(*s.base);
s.base++;
}
return 1;
}


//行编辑程序函数
void LineEdit()
{
char c,ch;
initStack(s);
ch=getchar();
while(ch!=EOF){
while(ch!=EOF||ch!='/n')
{
switch(ch){
case '#':Pop(s,c);break;
case '@':ClearStack(s);break;
default:Push(s,ch);break;
}
ch=getchar();
}
while(!EmptyStack(s))
{
char e;
Pop(s,e);
cout<<e;
}
if(ch!=EOF)
ch=getchar();
}
destroyStack(s);
}

//主函数
void main()
{
LineEdit();

}
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨蛋糕 2013-04-08
  • 打赏
  • 举报
回复
按照lz的程序的话那就是无限输入啊,什么时候能停止啊。
风吹得好舒服 2013-04-07
  • 打赏
  • 举报
回复
是的 是分配的有点多 但是什么叫添加一个结束符?是一个结束标识吗?
云斜月 2013-04-05
  • 打赏
  • 举报
回复
程序可以改成使用 getline()函数进行输入。直接获取正行,这样的话你得把栈修改下了,
云斜月 2013-04-05
  • 打赏
  • 举报
回复
行程序无结束符,EOF=-1的,键盘输入不进去的,因为你是使用的getchar()进行输入,所以一次只能读入一个字符。添加一个结束符程序就可以正常运行。。。。 对你写的栈:你既然是动态栈,何必一下子分配那么大空间,如果这样,还不如直接使用静态栈,纯属个人见解,勿喷
wxsxiaoK 2013-04-05
  • 打赏
  • 举报
回复
目测 e=*--s.top;返回的不是栈顶元素,是第二个。我没试说不准

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧