Problem Description
一天,cyk 又收到了勤奋好学的小学妹发来的代码,cyk 二话不说就打开了代码开始帮学妹找错。
不过,往往 cyk 收到的都是完全没有缩进的代码,这让他不得不先修改好缩进再帮学妹看代码。
渐渐地,cyk 面对越来越长的无缩进代码已经力不从心,他想请你帮助他写一个小程序,来实现自动格式化代码。
cyk 收到的代码都具有以下特征:
- 无缩进,每行都顶头
- 左花括号 '{' 永远在每行的第一个字符处
- 右花括号 '}' 永远在每一行的末尾(可能出现多个右花括号)
- 多个 if, else, for, while 不会出现在同一行
- 代码很紧凑,不会出现单独的空行
cyk 偏好的格式化代码的规则如下:
- 必须有缩进(每层缩进 4 个空格,左花括号和右花括号在单独的一行)
- 只需要格式化好缩进,代码的其他部分保持原样
你能帮 cyk 写出这个小程序吗?如果 cyk 满意,他会送你一个 Accepted 做奖励。
Input
输入数据有多组(数据组数不超过 10),到 EOF 结束。
每组输入包含一段多行的文本,表示 cyk 收到的一份代码,以字符串 "#EOF" (不包括引号) 来标志每组输入的结束。
保证每行字符串的末尾没有多余的空格,而字符串中间可能出现空格。每行字符串的长度不超过 1000。
Output
对于每组输入,输出一段格式化好的代码。每组输出后面跟一行空行。
Example Input
#include<stdio.h> int main() {int a,b; scanf("%d %d",&a,&b); printf("%d\n",a+b); return 0;} #EOF #include<stdio.h> int main() {int i,j,k,n,sum; n=5; sum=0; for(i=0;i<n;++i) {for(j=0;j<n;++j) {for(k=0;k<n;++k) {sum+=i*j*k;}}} printf("%d\n",sum); return 0;} #EOF
Example Output
#include<stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); printf("%d\n",a+b); return 0; } #include<stdio.h> int main() { int i,j,k,n,sum; n=5; sum=0; for(i=0;i<n;++i) { for(j=0;j<n;++j) { for(k=0;k<n;++k) { sum+=i*j*k; } } } printf("%d\n",sum); return 0; }
Hint
你可以使用 gets 函数来读入包含空格的字符串。
.....................
源代码
01 |
#include<stdio.h> |
02 |
#include<string.h> |
03 |
void suo( int g) |
04 |
{ |
05 |
int i; |
06 |
for (i=1;i<=g;i++) |
07 |
{ |
08 |
printf ( "
" ); |
09 |
} |
10 |
} |
11 |
int main() |
12 |
{ |
13 |
char daima[333]; |
14 |
int i,n,suojin=0; |
15 |
while ( gets (daima)) |
16 |
{ |
17 |
|
18 |
if ( strcmp (daima, "#EOF" )==0) |
19 |
{ |
20 |
printf ( "\n" ); |
21 |
continue ; |
22 |
suojin=0; |
23 |
} |
24 |
n= strlen (daima); |
25 |
suo(suojin); |
26 |
for (i=0;i<n;i++) |
27 |
{ |
28 |
if (daima[i]== '{' ) |
29 |
{ |
30 |
printf ( "%c\n" ,daima[i]); |
31 |
suojin++; |
32 |
suo(suojin); |
33 |
} |
34 |
else if (daima[i]== '}' ) |
35 |
{ |
36 |
suojin--; |
37 |
printf ( "\n" ); |
38 |
suo(suojin); |
39 |
printf ( "%c" , '}' ); |
40 |
} |
41 |
else printf ( "%c" ,daima[i]); |
42 |
} |
43 |
printf ( "\n" ); |
44 |
} |
45 |
return 0; |
46 |
} |