阿美的编辑器

top啦它 2020-06-18 09:37:35
Description

阿美向阿亮描述了自己的文本编辑需求,希望阿亮能够完善该功能:(1)每点击1次保存,则将当前文本状态进行保存;(2)最多保存10个状态,如果再次保存第11个状态,则将第1个状态销毁,依次类推。。。;(3)点击back按钮,则从当前状态的文本内容返回到上一个状态的文本内容,若没有上一个文本状态,则返回当前状态文本;(4)点击forward按钮,则从当前状态的文本内容前进到下一个状态的文本内容,若当前处于最新状态,则返回当前状态文本。
Input
有多行文本执行命令:
EDIT 字符串:代表编辑一行新文本并保存。
FORWARD:代表前进到下一个文本状态。
BACK:代表回到上一个文本状态。
QUIT:表示输入数据结束
说明:每个状态的文本内容最多不超过10000个英文字符;当遇到回车既是点击保存按钮,最多50个状态。
第一行一定是一个以EDIT开始的命令行,且作为第一个状态,也就是没有空白状态。
Output
所有命令执行结束时,阿美编写的小说内容。
Sample Input
EDIT 50年前,长沙镖子岭。
EDIT 四个土夫子正蹲在一个土丘上,所有人都不说话,直勾勾地盯着地上那把洛阳铲。
EDIT 铲子头上带着刚从地下带出的旧土,离奇的是,这一坏土正不停地向外渗着鲜红的液体......
EDIT “这下子麻烦大喽。”老烟头把他的旱烟在地上敲了敲,接着道,“下面是个血尸嘎,弄不好我们这点儿当当,都要撂在下面噢。”
BACK
BACK
BACK
FORWARD
QUIT

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define sizezifu 50000
#define new_size 50
typedef struct{
char **top;
char **base;
int size_top_base;
}zifu;
void init_zifu(zifu *(&s))
{
s = (zifu*)malloc(sizeof(zifu)); //先给s分配内存
s->base= (char**)malloc(sizeof(char*)*new_size);
if (!s->base) {
exit(-1);
}
s->top = s->base;
s->size_top_base = 0;
}
void push(zifu *s,char *st_r1)
{
s->top[s->size_top_base] = (char *)malloc(sizeof(char) * sizezifu);
strcpy(s->top[s->size_top_base],st_r1);
s->size_top_base += 1;
}
void pop(zifu *s)
{
for(int i = 0;i < s->size_top_base;i++)
{
printf("%s\n",s->top[i]);
}
}
int main(void)
{
char strr[20];
zifu *s;
init_zifu(s);
while(1)
{
scanf("%s",strr);
char strr1[3000];
switch(strr[0])
{
case 'E':
scanf("%s",strr1);
push(s,strr1);
break;
case 'B':
s->size_top_base -= 1;
break;
case 'F':
s->size_top_base += 1;
break;
case 'Q':
pop(s);
}
}
return 0;
}


这已经可以运行了,为什么在平台上提交还是会出错

求解,多谢了。
...全文
105 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2020-06-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<string.h>
#include<stdlib.h>

#define sizezifu 50000
#define new_size 50

typedef struct{
char **top;
char **base;
int size_top_base;
}zifu;

//void init_zifu(zifu *(&s))
void init_zifu(zifu **s)
{
*s = (zifu*)malloc(sizeof(zifu)); //先给s分配内存
(*s)->base= (char**)malloc(sizeof(char*)*new_size);
if (!(*s)->base) {
exit(-1);
}
(*s)->top = (*s)->base;
(*s)->size_top_base = 0;
}
void push(zifu *s,char *st_r1)
{
s->top[s->size_top_base] = (char *)malloc(sizeof(char) * sizezifu);
strcpy(s->top[s->size_top_base],st_r1);
s->size_top_base += 1;
}
void pop(zifu *s)
{
for(int i = 0;i < s->size_top_base;i++)
{
printf("%s\n",s->top[i]);
}
}
int main(void)
{
char strr[20];
zifu *s;
init_zifu(&s);
while(1)
{
scanf("%s",strr);
char strr1[3000];
switch(strr[0])
{
case 'E':
scanf("%s",strr1);
push(s,strr1);
break;
case 'B':
s->size_top_base -= 1;
break;
case 'F':
s->size_top_base += 1;
break;
case 'Q':
pop(s);
}
}
return 0;
}

供参考~
自信男孩 2020-06-18
  • 打赏
  • 举报
回复
楼主的问题应该是编译的问题。楼主用的g++编译器,而提交用的可能是C编译器。对于参数中出现&,C++识别,但是C语言是不认的。
引用&是C++的语法。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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