Cool Code | ||||||
| ||||||
Description | ||||||
小A喜欢问学长问题,但是,这个怪学长总有点“洁癖”。每次总抱怨她缩进不正确。你能写一个程序帮小A自动格式化代码吗? | ||||||
Input | ||||||
多组测试数据,每组测试数据为一段程序,END为结束标志。 保证: 1:每行一个语句。 2:'{', '}'都为独立的一行。 3:不包含任何注释。 4:没有类,结构体和switch。 5:所有缩进改变的原因都与'{','}'有关。 6:每行前后没有空格或者TAB。 7:每行长度不超过1000。 8:所给的程序无语法错误。 | ||||||
Output | ||||||
输出这个程序正确缩进以后的结果(用一个tab表示一个缩进,而不是空格。tab的转义字符为'\t') 每组输出之后输出一个空行。 | ||||||
Sample Input | ||||||
#include<stdio.h> int main() { int i; for(i = 0; i < 10;i++) { if (i == 0) { printf("%d", i); } else { printf(" %d", i); } } return 0; } END | ||||||
Sample Output | ||||||
#include<stdio.h> int main() { int i; for(i = 0; i < 10;i++) { if (i == 0) { printf("%d", i); } else { printf(" %d", i); } } return 0; } |
思路:
通过观察我们得到,如果遇到了一个{或者}tab缩进的长度就要跟着改变;我们用一个计数器来统计{、}的数目,如果遇到了一个{,先输出计数器长度的\t,然后计数器加一,表示下一行(多行)需要多输出一个tab了。如果遇到一个},那么先让计数器减一,表示本行就要少输出一个tab,然后输出\t.其余情况直接输出即可~
#include<stdio.h>
#include<string.h>
using namespace std;
char a[1010][1010];
int main()
{
while(gets(a[0]))
{
if(strcmp(a[0],"END")==0)
{
puts("");
continue;
}
int con=1;
while(1)
{
gets(a[con]);
con++;
if(a[con-1][0]=='E')break;
}
int cont=0;
for(int i=0;i<con-1;i++)
{
if(a[i][0]=='{')
{
for (int i = 0; i < cont; i++)
{
printf("\t");
}
printf("%s\n", a[i]);
cont++;
continue;
}
if(a[i][0]=='}')
{
cont--;
for (int i = 0; i < cont; i++)
{
printf("\t");
}
printf("%s\n", a[i]);
continue;
}
for (int i = 0; i < cont; i++)
{
printf("\t");
}
printf("%s\n", a[i]);
}
puts("");
}
}