团体程序设计天梯赛L3-019 代码排版(23分)

 

打算学完编译原理后再次实现它。。。

 

以下为比较“杂乱”的方法:

海量数据: https://pan.baidu.com/s/1Prd0ZqNLoCLLvXyJjCef3w

如果大家有发现这个程序的问题,请联系我,谢谢啦~~~ 我很疑惑,不知道错在哪里,难受。。。

  1 /*把黏在一起的代码以某种格式进行编排
  2 编排方式:https://pintia.cn/problem-sets/994805046380707840/problems/994805047169236992
  3 */
  4 #include <stdio.h>
  5 #include <stdlib.h>
  6 #include <string.h>
  7 #include <stdbool.h>
  8 #define maxlen 1000000
  9 
 10 char str[maxlen],s[maxlen];
 11 long len,i,j,w=0,g;
 12 long sum_lock=0,lock[maxlen],sum_lockif=0,lockif[maxlen];
 13 bool vis=false;
 14 char c=' ',vis_kuo; //' '
 15 
 16 ///删除多余的空格
 17 void DelSpace()
 18 {
 19     while (str[i]==' ')            //delete ' '
 20         i++;
 21 }
 22 
 23 ///'{'及换行操作
 24 void EndOfLeft()
 25 {
 26     DelSpace();
 27     if (str[i]=='{')
 28     {
 29         i++;
 30         DelSpace();
 31         ///锁定,之后的位置(行首空格)大于等于lock[sum_lock]
 32         sum_lock++;
 33         lock[sum_lock]=w+1;
 34     }
 35     printf("{\n");
 36     w++;
 37     for (j=0;j<2*w;j++)
 38 //        printf(" ");
 39         printf("%c",c);
 40 }
 41 
 42 ///_(condition)_
 43 void Parenthese()
 44 {
 45     DelSpace();
 46 //    printf(" ");
 47     printf("%c",c);
 48     ///c语言中语句有括号,这是定义,即if () while ();而pascal等语言可以没有
 49     vis=false; g=0;
 50     while (!(vis && g==0))        //not exit initially
 51     {
 52         printf("%c",str[i]);
 53         if (str[i]=='(')
 54         {
 55             vis=true;
 56             g++;
 57         }
 58         else if (str[i]==')')    //the number of ')' is the same as '('
 59             g--;
 60         i++;
 61     }
 62 //    printf(" ");
 63     printf("%c",c);
 64     EndOfLeft();
 65 }
 66 
 67 ///遇到else的操作:上一个if的位置决定空格的情况
 68 void elseOp()
 69 {
 70     while (w>lockif[sum_lockif]-1)  //-1
 71     {
 72         printf("\n");
 73         w--;
 74         for (j=0;j<2*w;j++)
 75 //            printf(" ");
 76             printf("%c",c);
 77         printf("}");
 78     }
 79     sum_lockif--;
 80     printf("\n");
 81     for (j=0;j<2*w;j++)
 82 //        printf(" ");
 83         printf("%c",c);
 84 //    printf("else ");    //add a ' '
 85     printf("else%c",c);
 86     i+=4;
 87     EndOfLeft();
 88 }
 89 
 90 ///'}'及换行操作
 91 void EndOfRight()
 92 {
 93     ///先把已有的'}'输出
 94     while (1)
 95     {
 96         DelSpace();
 97         if (str[i]!='}')
 98             break;
 99         i++;
100         printf("\n");
101         if (vis_kuo)
102             vis_kuo=false;
103         else
104             w--;
105         for (j=0;j<2*w;j++)
106 //            printf(" ");
107             printf("%c",c);
108         printf("}");
109         sum_lock--;            //解除锁定
110     }
111 
112     ///若接下来的几个字符为"else",不按lock的情况输出
113     strncpy(s,str+i,4);
114     s[4]='\0';
115     if (strcmp(s,"else")==0)
116     {
117         elseOp();
118         return;
119     }
120 
121     /**
122         本身有'{'的,锁定'}'的输出,直到遇到对应的'}',才结束锁定
123         当被锁定时,输出的'}'的位置必须大于锁定的'{'的位置
124     */
125     ///输出到上一个'{'所在的空格位置
126     while (w>lock[sum_lock])
127     {
128         printf("\n");
129         w--;
130         for (j=0;j<2*w;j++)
131 //            printf(" ");
132             printf("%c",c);
133         printf("}");
134     }
135 
136     printf("\n");
137     for (j=0;j<2*w;j++)
138 //        printf(" ");
139         printf("%c",c);
140 }
141 
142 int main()
143 {
144     gets(str);
145     len=strlen(str);
146     i=0;
147     DelSpace();
148     for (;i<len;)
149     {
150         ///strncpy:add '\0'
151 //        strncpy(s,str+i,6);
152 //        s[6]='\0';
153 //        if (strcmp(s,"main()")==0)
154 //        {
155 //            printf("main()\n");
156 //            i+=6;
157 //            EndOfLeft();
158 //            continue;
159 //        }
160 
161         strncpy(s,str+i,5);
162         s[5]='\0';
163         if (strcmp(s,"main(")==0)
164         {
165             printf("main(");
166             i+=5;
167             while (str[i]!=')')
168             {
169                 printf("%c",str[i]);
170                 i++;
171             }
172             printf(")\n");
173             i++;
174             ///由后面的'{'处理,避免int main(){}
175 //            EndOfLeft();
176             DelSpace();
177             continue;
178         }
179 
180         strncpy(s,str+i,3);
181         s[3]='\0';
182         if (strcmp(s,"for")==0)
183         {
184             printf("for");
185             i+=3;
186             Parenthese();
187             continue;
188         }
189 
190         strncpy(s,str+i,5);
191         s[5]='\0';
192         if (strcmp(s,"while")==0)
193         {
194             printf("while");
195             i+=5;
196             Parenthese();
197             continue;
198         }
199 
200         strncpy(s,str+i,2);
201         s[2]='\0';
202         if (strcmp(s,"if")==0)
203         {
204             sum_lockif++;            //锁定if,在遇到else之前,则输出的'}'的位置必须大于锁定的if的位置
205             lockif[sum_lockif]=w+1;
206             printf("if");
207             i+=2;
208             vis=true;
209             Parenthese();
210             vis=false;
211             continue;
212         }
213 
214         strncpy(s,str+i,4);
215         s[4]='\0';
216         if (strcmp(s,"else")==0)
217         {
218             elseOp();
219             continue;
220         }
221         ///程序体的'{',除int main,if,for后面附带的'{'之外
222         if (str[i]=='{')
223         {
224             i++;
225             DelSpace();
226             printf("{");
227             sum_lock++;
228             lock[sum_lock]=w+1;
229 
230             ///如果'{'后面接')',即{},则无增' '输出
231             if (str[i]=='}')
232             {
233                 vis_kuo=true;
234                 EndOfRight();
235                 continue;
236             }
237 
238             printf("\n");
239             w++;
240             for (j=0;j<2*w;j++)
241                 printf(" ");
242             continue;
243         }
244         ///程序体的'}',除int main,if,for后面附带的'}'之外
245         if (str[i]=='}')
246         {
247             EndOfRight();
248             continue;
249         }
250         if (str[i]==';')
251         {
252             printf(";");
253             i++;
254             EndOfRight();
255             continue;
256         }
257             printf("%c",str[i]);
258             i++;
259     }
260     return 0;
261 }
262 /*
263 int main(){ int a=3; int b=2; int c=1; int d=0;}
264 */
265 /*
266 int main(){int a=0; if (3>2) printf("Y"); int b=2;  }
267 */
268 /*
269 int main() {if (3>2) { printf("Y"); } return 0;}
270 */
271 /*
272 int main() {if (3>2) printf("Y"); return 0;}
273 */
274 /*
275 int main(){if (3>2) {if (4>3) { if (5>3) {int i=3;}   }}}
276 */
277 /*
278 int main(){if (3>2)  if (4>3) if (5>3) int i=3;}
279 */
280 /*
281 int main() {if (3>2) while (3>2) {if (3>2) printf("Y"); if (3>2) printf("Y"); } return 0;}
282 */
283 
284 /*
285 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; }
286 */
287 /*
288 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;}
289 */
290 /*
291 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;}
292 */
293 /*
294 int main(){int i=0; if (2<3) {if (3>2) while (i<2) while (i<3) i++; printf("Y"); } return 0; }
295 */
296 /*
297 int main(){int i=0; if (3>2) while (i<2) while (i<3) i++; else i--; return 0;}
298 */
299 /*
300 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;}
301 */
302 /*
303 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;}
304 */
305 /*
306 int main(){int i=0; if (3>2) i++;else if (3>2) i++;else if (3>2)i++; return 0;}
307 */
308 /*
309 int main(){ if (3>2) while (3>2) while (4>3) i++; else while (4>3) j--; }
310 */
311 
312 /*
313 int main(){while (1>3)  while (3>2) while (5>3) i++; j--; k++;}
314 */
315 /*
316 int main(){while (1>3) if (3>2) printf("Y\n"); }
317 */
318 /*
319 int main(){while (1>3) if (3>2) printf("Y\n"); else printf("N"); }
320 */
321 
322 
323 /*
324    int main()  {   return 0;   }
325 */
326 /*
327 int main(){}
328 */
329 /*
330 int main() { int i=3; {int i=2;} }
331 */
332 /*
333 int main() { {int i=2;} if (3>2) if (4>3) else 5>3; }
334 */
335 /*
336 int main() { if (3>2) i++; {int i=2;} {int i=2;} }
337 */
338 /*
339 int main() { {int i=2;} { {} } {} }
340 */
341 /*
342 int main() { {int i=2;} { {i=3; {}} {} } }
343 */
344 /*
345 int main() {{{{}}}}
346 */
347 /*
348 int main()  { for (int i=1;i<=3;i++) for (int j=1;j<=5;j++) k++; }
349 */
350 /*
351 int main() { for (int i=1;i<=3;i++) while (3>2) if(3>2) printf("Y\n"}
352 */
353 /*
354      int main()  {    if           (3>2)        i++;    else    j--;    for (i=1;i<=5;i++)              j++;      while          (3>2)    i-;        }
355 */
356 /*
357      int main()  {    if           (3>2)   {     i++;   }  else   {   j--;  }  for (i=1;i<=5;i++)   {           j++;    }  while          (3>2)   {  i-;   }     }
358 */
359 /*
360 int main() { if (  3>2   )  i++;  else if (   5>3 &2<3) j--;  for (  i=1;i<=3;i++   )    i--;   while (1>3   )  j--; }
361 */
362 /*
363 int main() { if ( (3>2) && (4>3 | 3>2)  ) i++;}
364 */
365 /*
366 int main() { if ( if (3>2) i++;  ) i++;}
367 */

 

转载于:https://www.cnblogs.com/cmyg/p/9221899.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canvas入门实战--邀请卡生成与下载

1.前言 写了很多的javascript和css3的文章&#xff0c;是时候写一篇canvas的了。canvas是html5提供的一个新的功能&#xff01;至于作用&#xff0c;就是一个画布。然后画笔就是javascript。canvas的用途非常的广&#xff0c;特别是html5游戏以及数据可视化这两个方面。现在can…

javascript 数组求交集/差集/并集/过滤重复

最近在小一个小程序项目,突然发现 javscript 对数组支持不是很好,连这些基本的功能,都还要自己封装.网上查了下,再结合自己的想法,封装了一下,代码如下. //数组交集 Array.prototype.intersect function(){let mine this.concat();for (var i 0; i < arguments.length; …

Apache ActiveMQ 5.9发布

Apache ActiveMQ团队刚刚发布了新的ActiveMQ 5.9版本 。 Apache ActiveMQ 5.9发布 自从先前的5.8版本以来&#xff0c;此版本是8个月的辛苦工作。 在此发行版中&#xff0c;我们将像往常一样对代理进行增强&#xff0c;并使用最新的协议&#xff08;例如AMQP和MQTT&#xff…

android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频

前言上次我写了一遍文章《Android 关于美颜/滤镜 从OpenGl录制视频的一种方案》&#xff0c;里面利用ImageReader来从获取Surface上获取数据&#xff0c;但是经过熊皮皮的提醒&#xff0c;我发现多PBO的确可以实现跟ImageReader一样的效果&#xff0c;并且版本要求仅为Android4…

DAY77-Django框架(八)

今日内容&#xff1a;创建多表模型、多表数据操作、基于对象的跨表查询、基于双下划线的跨表查询 一、创建多表模型 class Author(models.Model):# id如果不写,会自动生成,名字叫nid,并且自增id models.AutoField(primary_keyTrue)name models.CharField(max_length32)sex m…

Async Await

接着上一篇Generator co的使用 https://juejin.im/post/5ab51336f265da239d493ff4 这里继续说说js异步处理的方法 async await( 即Generator的语法糖) async 是“异步”的简写&#xff0c;async 用于申明一个 function 是异步的&#xff0c;而 await 用于等待一个异步方法执行…

Java对象到对象映射器

我在该项目上使用了Dozer一段时间。 但是&#xff0c;最近我遇到了一个非常有趣的错误&#xff0c;它促使我环顾四周&#xff0c;并尝试使用其他“对象到对象”映射器。 这是我找到的工具列表&#xff1a; 推土机&#xff1a;推土机是Java Bean到Java Bean的映射器&#xff…

android媒体播放框架,Android 使用超简单的多媒体播放器JiaoZiVideoPlayer

在之前的项目中用到了视频播放的功能&#xff0c;在网上看了看使用了大家用的比较多的一个开源项目JiaoZiVideo可以迅速的实现视频播放的相关功能。JiaoZiVideo的简单使用集成了JiaoZiVideo后仅需这几行代码就可以实现播放视频JZVideoPlayerStandard jzVideoPlayerStandard (J…

送福利:ROKID 语音开发板免费送,开启你的物联网之旅

都让一让&#xff0c;我说个事情&#xff1a;掘金联合 Rokid 开发者社区给大家发福利啦&#xff01; 掘金联合 Rokid 开发者社区为大家准备了一些福利&#xff0c;只要秀出你的 skill 和技术栈&#xff0c;就有可能获得 Rokid 全栈语音智能开发套件。 ? Rokid开箱试用活动 活…

点击复制文本

点击按钮&#xff0c;进行文本复制操作。实现这个功能需要二点&#xff1b; 一&#xff1a;用window.getSelection().selectAllChildren(“”)获取要复制的内容 二&#xff1a;用document.execCommand ("Copy");进行复制操作 关键代码 window.getSelection().selec…

6.25

TEXT 94 Cancer biology 肿瘤生物学 Cramping tumours 断了肿瘤的活路&#xff08;陈继龙编译&#xff09; Jan 18th 2007 From The Economist print edition An old observation about cancer cells may lead to a new treatment 早年发现的肿瘤细胞的一个特征可能为治疗肿瘤打…

Java Lambdas简介

Java 8的主题是lambdas。 我已经注意到&#xff0c;对于许多Java程序员来说&#xff0c;lambda都是非常难的材料。 因此&#xff0c;让我们尝试对它们有一个基本的了解。 首先&#xff0c;lambda到底是什么&#xff1f; Lambda是一个匿名函数&#xff0c;与常规函数不同&#…

ios html清除缓存图片,iOS,如何清理缓存的图片

通常&#xff0c;在我们加载图片的时候&#xff0c;一般都会做缓存处理&#xff0c;像SDWebImage&#xff0c;YYWebImage都是有的&#xff0c;但是有缓存&#xff0c;当然也需要清理缓存,如果没有这个功能的话&#xff0c;显得app太没人性化。获取总的缓存大小// 获取某个路径下…

搭建一个项目的前期准备

后端&#xff1a;node(驱动) mogodb(数据库) express(node框架) mongoose(快速建模工具) moment.js(时间和日期格式化) jade(模板引擎)前端&#xff1a; jquery(类库) bootstrsop(样式框架) bower(npm模块)本地环境&#xff1a;less cssmin jshint uglifyjs mocha …

ZOJ1081 Points Within

在解析几何中&#xff0c;我们大量的使用列方程求解未知量。但是在计算机计算的时候&#xff0c;解析几何的算法因为使用除法过多可能会带来严重的精度误差&#xff0c;所以简单来说&#xff0c;计算几何使用了一些其他的等效的方法来解决这些问题。 这里先说一个比较基础的题目…

如何使用JavaScript控制台改进工作流程

作为Web开发人员&#xff0c;很有必要了解如何调试代码。后台开发我们经常使用外部库来记录日志&#xff0c;并在某些情况下格式化显示日志&#xff0c;前端我们会使用断点和控制台&#xff0c;但是我们浏览器的控制台比我们想象的要强大得多。 当我们考虑控制台时&#xff0c…

如何在OpenJDK中使用ECC

曾经试图在Java和OpenJDK中使用椭圆曲线密码术 &#xff08;ECC&#xff09;的每个人要么被迫使用Bouncy Castle&#xff0c;要么被SunEC提供者弄糊涂了 。 SunEC提供程序根据文档 &#xff08;报价&#xff09;提供以下算法&#xff1a; AlgorithmParameters 欧共体 KeyAgr…

html 文本框数量加减,收藏!js实现input加减

好的程序员是会复制粘贴的&#xff0c;这样说好像会被唾弃的。。。。。html减号按钮点击事件function subtraction(){//获取-号按钮var subtraction document.getElementById("subtraction");//获取文本框var number document.getElementById("number");…

select、poll、epoll之间的区别总结[整理]

原文:https://www.cnblogs.com/Anker/p/3265058.html 好文章收藏下&#xff0c;慢慢品味 select&#xff0c;poll&#xff0c;epoll都是IO多路复用的机制。I/O多路复用就通过一种机制&#xff0c;可以监视多个描述符&#xff0c;一旦某个描述符就绪&#xff08;一般是读就绪或者…

JPA(七):映射关联关系------映射双向多对一的关联关系

映射双向多对一的关联关系 修改Customer.java package com.dx.jpa.singlemanytoone;import java.util.Date; import java.util.HashSet; import java.util.Set;import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; impo…