团体程序设计天梯赛L3-019 代码排版(23分)
打算学完编译原理后再次实现它。。。
以下为比较“杂乱”的方法:
海量数据: https://pan.baidu.com/s/1Prd0ZqNLoCLLvXyJjCef3w
如果大家有发现这个程序的问题,请联系我,谢谢啦~~~ 我很疑惑,不知道错在哪里,难受。。。
/*把黏在一起的代码以某种格式进行编排
编排方式:https://pintia.cn/problem-sets/994805046380707840/problems/994805047169236992
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define maxlen 1000000 char str[maxlen],s[maxlen];
long len,i,j,w=,g;
long sum_lock=,lock[maxlen],sum_lockif=,lockif[maxlen];
bool vis=false;
char c=' ',vis_kuo; //' ' ///删除多余的空格
void DelSpace()
{
while (str[i]==' ') //delete ' '
i++;
} ///'{'及换行操作
void EndOfLeft()
{
DelSpace();
if (str[i]=='{')
{
i++;
DelSpace();
///锁定,之后的位置(行首空格)大于等于lock[sum_lock]
sum_lock++;
lock[sum_lock]=w+;
}
printf("{\n");
w++;
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
} ///_(condition)_
void Parenthese()
{
DelSpace();
// printf(" ");
printf("%c",c);
///c语言中语句有括号,这是定义,即if () while ();而pascal等语言可以没有
vis=false; g=;
while (!(vis && g==)) //not exit initially
{
printf("%c",str[i]);
if (str[i]=='(')
{
vis=true;
g++;
}
else if (str[i]==')') //the number of ')' is the same as '('
g--;
i++;
}
// printf(" ");
printf("%c",c);
EndOfLeft();
} ///遇到else的操作:上一个if的位置决定空格的情况
void elseOp()
{
while (w>lockif[sum_lockif]-) //-1
{
printf("\n");
w--;
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
printf("}");
}
sum_lockif--;
printf("\n");
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
// printf("else "); //add a ' '
printf("else%c",c);
i+=;
EndOfLeft();
} ///'}'及换行操作
void EndOfRight()
{
///先把已有的'}'输出
while ()
{
DelSpace();
if (str[i]!='}')
break;
i++;
printf("\n");
if (vis_kuo)
vis_kuo=false;
else
w--;
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
printf("}");
sum_lock--; //解除锁定
} ///若接下来的几个字符为"else",不按lock的情况输出
strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"else")==)
{
elseOp();
return;
} /**
本身有'{'的,锁定'}'的输出,直到遇到对应的'}',才结束锁定
当被锁定时,输出的'}'的位置必须大于锁定的'{'的位置
*/
///输出到上一个'{'所在的空格位置
while (w>lock[sum_lock])
{
printf("\n");
w--;
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
printf("}");
} printf("\n");
for (j=;j<*w;j++)
// printf(" ");
printf("%c",c);
} int main()
{
gets(str);
len=strlen(str);
i=;
DelSpace();
for (;i<len;)
{
///strncpy:add '\0'
// strncpy(s,str+i,6);
// s[6]='\0';
// if (strcmp(s,"main()")==0)
// {
// printf("main()\n");
// i+=6;
// EndOfLeft();
// continue;
// } strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"main(")==)
{
printf("main(");
i+=;
while (str[i]!=')')
{
printf("%c",str[i]);
i++;
}
printf(")\n");
i++;
///由后面的'{'处理,避免int main(){}
// EndOfLeft();
DelSpace();
continue;
} strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"for")==)
{
printf("for");
i+=;
Parenthese();
continue;
} strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"while")==)
{
printf("while");
i+=;
Parenthese();
continue;
} strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"if")==)
{
sum_lockif++; //锁定if,在遇到else之前,则输出的'}'的位置必须大于锁定的if的位置
lockif[sum_lockif]=w+;
printf("if");
i+=;
vis=true;
Parenthese();
vis=false;
continue;
} strncpy(s,str+i,);
s[]='\0';
if (strcmp(s,"else")==)
{
elseOp();
continue;
}
///程序体的'{',除int main,if,for后面附带的'{'之外
if (str[i]=='{')
{
i++;
DelSpace();
printf("{");
sum_lock++;
lock[sum_lock]=w+; ///如果'{'后面接')',即{},则无增' '输出
if (str[i]=='}')
{
vis_kuo=true;
EndOfRight();
continue;
} printf("\n");
w++;
for (j=;j<*w;j++)
printf(" ");
continue;
}
///程序体的'}',除int main,if,for后面附带的'}'之外
if (str[i]=='}')
{
EndOfRight();
continue;
}
if (str[i]==';')
{
printf(";");
i++;
EndOfRight();
continue;
}
printf("%c",str[i]);
i++;
}
return ;
}
/*
int main(){ int a=3; int b=2; int c=1; int d=0;}
*/
/*
int main(){int a=0; if (3>2) printf("Y"); int b=2; }
*/
/*
int main() {if (3>2) { printf("Y"); } return 0;}
*/
/*
int main() {if (3>2) printf("Y"); return 0;}
*/
/*
int main(){if (3>2) {if (4>3) { if (5>3) {int i=3;} }}}
*/
/*
int main(){if (3>2) if (4>3) if (5>3) int i=3;}
*/
/*
int main() {if (3>2) while (3>2) {if (3>2) printf("Y"); if (3>2) printf("Y"); } return 0;}
*/ /*
int main() { if (3>2) if (4>3) if (6>-2) printf("Y\n"); else if (3>2) printf("Y\n"); else printf("N\n"); return 0; }
*/
/*
int main(){if (3>2) while(3>2){if (3>2) return 3; else return 2; }else while(3>2){while(5>3) printf("Y");} return 0;}
*/
/*
int main(){if (3>2) while(3>2)if (3>2) return 3; else return 2; else while(3>2){while(5>3) printf("Y");} return 0;}
*/
/*
int main(){int i=0; if (2<3) {if (3>2) while (i<2) while (i<3) i++; printf("Y"); } return 0; }
*/
/*
int main(){int i=0; if (3>2) while (i<2) while (i<3) i++; else i--; return 0;}
*/
/*
int main(){int i=0; if (3>2) while (i<2) { if (3>2) printf("Y"); else printf("N"); while (i<3) i++;} else i--; return 0;}
*/
/*
int main(){int i=0; if (3>2) while (i<2) while (i<3) if (3>2) printf("Y"); else printf("N"); else i--; return 0;}
*/
/*
int main(){int i=0; if (3>2) i++;else if (3>2) i++;else if (3>2)i++; return 0;}
*/
/*
int main(){ if (3>2) while (3>2) while (4>3) i++; else while (4>3) j--; }
*/ /*
int main(){while (1>3) while (3>2) while (5>3) i++; j--; k++;}
*/
/*
int main(){while (1>3) if (3>2) printf("Y\n"); }
*/
/*
int main(){while (1>3) if (3>2) printf("Y\n"); else printf("N"); }
*/ /*
int main() { return 0; }
*/
/*
int main(){}
*/
/*
int main() { int i=3; {int i=2;} }
*/
/*
int main() { {int i=2;} if (3>2) if (4>3) else 5>3; }
*/
/*
int main() { if (3>2) i++; {int i=2;} {int i=2;} }
*/
/*
int main() { {int i=2;} { {} } {} }
*/
/*
int main() { {int i=2;} { {i=3; {}} {} } }
*/
/*
int main() {{{{}}}}
*/
/*
int main() { for (int i=1;i<=3;i++) for (int j=1;j<=5;j++) k++; }
*/
/*
int main() { for (int i=1;i<=3;i++) while (3>2) if(3>2) printf("Y\n"}
*/
/*
int main() { if (3>2) i++; else j--; for (i=1;i<=5;i++) j++; while (3>2) i-; }
*/
/*
int main() { if (3>2) { i++; } else { j--; } for (i=1;i<=5;i++) { j++; } while (3>2) { i-; } }
*/
/*
int main() { if ( 3>2 ) i++; else if ( 5>3 &2<3) j--; for ( i=1;i<=3;i++ ) i--; while (1>3 ) j--; }
*/
/*
int main() { if ( (3>2) && (4>3 | 3>2) ) i++;}
*/
/*
int main() { if ( if (3>2) i++; ) i++;}
*/
团体程序设计天梯赛L3-019 代码排版(23分)的更多相关文章
- 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3009 长城 方法证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)
前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...
随机推荐
- 为什么找程序员一定要看他的 GitHub
听说 最开始听到这句话是某知名互联网公司大牛告诉我的,我很不以为然,不过迫于他是"leader"我也注册了一个 highsea (广告 0.0):当然我可懒得 push 更别提 c ...
- 2017年软件工程第十二次作业-PSP总结报告
回顾1 1.回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学期 ...
- Notes of Daily Scrum Meeting(11.8)
Notes of Daily Scrum Meeting(11.8) 预备中开始写代码的第一天,因为大家对Android编程的熟悉程度还是不够,所以工程进行的非常缓慢,有四名队员 开始编写自己的任务, ...
- 爱码室Crawler & classification module项目工作分配
项目情况 爬虫项目是上届学生遗留下来的项目,他们已经实现了基础的功能,而我们来负责完善,主要需要解决的问题是怎么让爬虫脱离爬和停的繁琐指令,更加的智能化.所以我们的计划是在前人的源码基础上,加以修改测 ...
- Internet History, Technology and Security (Week5.1)
Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...
- 《软件工程和Python》第0周作业1
写在前面的话 欢迎大家开始一段新的课程学习!从开博客开始吧.每次博客作业都会有评分,计入总成绩哦. 1. 截止日期 本次作业的提交截止时间:见老师要求 2. 作业要求 (1)建立个人技术博客和 ...
- 转 彻底理解js中的&&和||
javascript中,&&和||的用法比较神奇,经常用在对象上,例如a || b,如果a不存在,则返回b.a && b,如果a存在,则返回b,否则返回a. 光这样看, ...
- Beta阶段——第一篇 Scrum 冲刺博客
i. 提供当天站立式会议照片一张: ii. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: 数据存储方式改本地存储为数据库存储. (2) 今天计划完成的工作: 账单和剩余舍 ...
- 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查
初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序 初入码田--ASP.NET MVC4 Web应用开发之一 实现简单的登录 2016-07-29 一.创建M002Adm ...
- SpringBoot(七)_统一异常处理
我感觉看了这节课,给我的思考还是很多的,感觉受益良多.废话不多说,一起学习. 统一的 外层结构返回 这样利于代码看着也规范,前端处理也统一 # 错误返回 { "code": 1, ...