数据结构中 行编辑 程序问题

如果遇到‘#’,表示后退一格,即前一字符无效,如果遇到@,表示前一单词无效,即退出到空格或所在行头为止。采用栈实现。
输入:
输入包含若干行,由各种字符构成。
输出:
利用描述规则输出最后的文本内容。

# include <iostream>
# define N 100
# define M 10
using namespace std;

typedef struct
{
char *base;
char *top;
int size;
}stack;

void initestack (stack &s)
{
s.base = (char *)malloc (N*sizeof (char));
if (!s.base) return ;
s.top = s.base ;
s.size = N;
}

void push (stack &s,char e)
{
if (s.top - s.base >=s.size )
{
s.base = (char *)realloc (s.base ,(N+M)*sizeof (char));
if (!s.base ) return ;
s.top = s.base +s.size ;
s.size +=M;
}
*s.top++ = e;
}

int pop (stack &s,char &e)
{
if (s.base == s.top ) return 0;
return e = *--s.top ;

}
int isempty (stack &s)
{
if (s.base == s.top )
return 1;
else
return 0;
}

void panduan (stack s)
{
char E;
if (isempty (s) ==1)
return ;
while (*--s.top != ' ' )
pop (s,E);
}
int main ()
{
stack s;
initestack (s);
char ch;char e;
ch = getchar ();
while (ch != EOF)
{
while (ch != EOF && ch != '\n')
{
if (ch == '#')
pop (s,e);
else
if (ch == '@')
panduan (s);
else
push (s,e);

}
ch = getchar ();
}
while (s.base != s.top )
cout<<pop (s,e)<<endl;
return 0;
}

大家帮忙看看这个代码 哪里有问题 谢谢了

void panduan (stack &s)
{
char E;
if (isempty (s) ==1)
return ;
while (s.top !=s.base )//原来你的判断不对
pop (s,E);
}
int main ()
{
stack s;
initestack (s);
char ch;char e;
ch = getchar ();
while (ch != EOF)
{
if (ch != EOF && ch != '\n')//while要改为if
{
if (ch == '#')
pop (s,e);
else if (ch == '@')
panduan (s);
else
push (s,ch); //e要改为ch
}
ch = getchar ();
}
while (s.base != s.top ){pop (s,e);
cout<<e<<endl;}//原来的输出有问题f
return 0;
}追问

嗯嗯 不过那个判断在这里应该没错的哈 遇到@是指清除前一个单词 而不是清空栈 但是你改好后的程序运行后 还是没结果的呢 你运行过没呢

追答

当然有结果啊

追问

嗯 先谢谢你哈 不过我这还真没答案的呢 你看看这个图 

回车后没结果 也不结束 

追答

你连输入还没搞定啊,输完后按ctrl+z啊一次不行就按两次ctrl+z

追问

哦哦 为什么要ctrl+z 呢 这个从来没用过的 是和EOF有关的么? 初学者 还望详细解释下哈 谢谢了

追答

是和EOF有关的

温馨提示:内容为网友见解,仅供参考
无其他回答

数据结构 文本行编辑,错在哪呀?各位大侠帮帮忙
scanf后面要加上getchar()函数吸收掉回车符,防止把回车符传递给后面的gets()等函数!这样的话,输入输出没问题了。不过选择插入的功能,插入后显示的字符串还是有点问题,已经改好了……include <stdio.h> include <stdlib.h> include <string.h> define MAX_LEN 50\/*文件最大行数*\/ define LI...

单共享栈
三、行编辑程序问题 “每接受一个字符即存入存储器” ? 并不恰当! 设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区,并假设“#”为退格符,“@”为退行符。 在用户输入一行的过程中,允许用户输入出差错,并在发现有误时可以及时更正。 合理的作法是:假设从终端接受了这样两行字符: whli#...

求数据结构(用面向对象方法与C++语言描述)第二版 殷人昆主编 课后答案...
设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。【基本要求】1.首先用二维数组存储迷宫数据,迷宫数据由用户输入。2.一个以链表作存储结构的栈类型,然后编写一个求解迷宫的递归或非递归程序。求得的通路以三元组(i,j,d)形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走...

数据结构中的主函数怎么编?
典型的单片机程序在程序指针复位后,首先进行堆栈、中断、中断向量、定时器、串行口等接口设置、初始化数据存储区和显示内容,然后就来到了一个监测、等待或空循环,在这个循环中,CPU可以监视外设、响应中断或用户输入。 这段主程序可以看作是一个内核,内核负责系统的初始化和开放、调度其它任务,相当于C语言中的主函数。

编程课是学什么的?
操作系统、数据库、设计模式、软件工程、数据结构与算法编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的...

Linux系统中的\/proc文件系统有什么用?
当编辑程序试图打开一个虚拟文件时,这个文件就通过内核 中的信息被凭空地 (on the fly) 创建了。这是一些我从我的系统中得到的一些有趣 结果: 代码如下: $ ls -l \/proc\/cpuinfo -r--r--r-- 1 root root 0 Dec 25 11:01 \/proc\/cpuinfo $ file \/proc\/cpuinfo \/proc\/cpuinfo: empty $ cat \/proc...

求图书馆管理系统论文!现在能用的,好的给加分!!!
数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。 1.1.1.1 用户数据 目前,大多数主流数据库管理系统把用户数据表示为关系。现在把关系看作数据表。表的列包含域或属性,表的行包含对应业务环境中的实体的记录。并非...

昨天刚参加完计算机一级等级考试,考试过程中由于打开了俩遍outlook的软 ...
1、(考生单击窗口下方"打开[Internet应用]应用程序"启动IE) 打开Internet Explorer,完成下面操作: 1)、在地址栏中输入http:\/\/pear.php.net\/packages.php进入其页面; 2)、将该网页以文本文件的格式保存到考生文件夹下,命名为:pear.txt。 2、(考生单击窗口下方"打开[Internet应用]应用程序"启动IE) 1)、请进入"...

编写一个程序,设置两个按钮,分别控制升旗和降旗,如图3。
(4)某些重要的原始数据、数学推导、计算程序、框图、结构图、统计表、计算机打印输出件等。(5)附录段置于参考文献表之后,附录中的插图、表格、公式、参考文献等的序号与正文分开,另行编制,如编为“图1”,“图2”;“表1”,“表3”;“式(1)”,“式2”;“文献[1]”,“文献[2]”等。四、毕业设计(论文)...

React+Hook+ts+antDesign实现table行编辑功能
实现表格行编辑功能的关键步骤包括:定义表单数据结构,确保数据类型和结构符合编辑需求。利用useReducer或useState管理表单状态,如表单值、编辑模式等。使用Ant Design Table组件创建表格,并配置编辑器组件,如cellEditProps属性。为编辑器添加事件处理逻辑,如onCellEditChange,实现数据更新和验证。优化用户体验...

相似回答