这个题看着和麻烦,其实格式看完了之后思路还是比较简单的,就是判断特殊字符,控制格式。
首先,在读取数据这里卡了一下,用getchar在回车后就会阻塞就会停止,触发之后的事件。
所以想直接读取单个字符直接判断输出是不行了,那就先读到数组中。
之后就要注意格式了,这个题叙述和样例不太一样,具体询问老师后,似乎应该按照样例的来,即逗号后面有空格和左花括号前有空格,其他按叙述来。
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void suojin(int n)
{
int i;
for (i=0;i<n;i++)
printf(" ");
}
int main()
{
char ch;
int i=0,n=0,slen;
char str[3000];
while((ch=getchar())!=EOF)
{
if (!isspace(ch))
{
str[i]=ch;
i++;
}
}
str[i]=0;
slen=strlen(str);
for (i=0;i<slen;i++)
{
if (str[i]=='{')
{
if (n) putchar(' ');
putchar(str[i]);
if (str[i+1]!=';') putchar('\n');
n++;
suojin(n);
continue;
}
else if (str[i]=='}')
{
if (str[i-1]!=';') putchar('\n');
n--;
suojin(n);
putchar(str[i]);
continue;
}
else if (str[i]==';')
{
putchar(str[i]);
if (str[i+1]!='{') putchar('\n');
if (str[i+1]!='{'&&str[i+1]!='}') suojin(n);
continue;
}
else if (str[i]==',')
{
putchar(str[i]);
putchar(' ');
}
else
putchar(str[i]);
}
return 0;
}