读书人

acm题求解决,该怎么解决

发布时间: 2013-08-21 10:42:06 作者: rapoo

acm题求解决

输入一行源代码整理成标准格式的代码,
例如input: int main(){。{。。。{a+b=1;}}。。}
output: int main()
{
{
{
a+b=1;
}
}
}
注意:缩进的空格为四个为一个单位。
以下是我写的代码,编译通过,但不出结果;
求大神帮忙。。。
#include<stdio.h>
int kuohao=1,kuohao1=1;
static int m=0,geshu=0,huanhang=0;
char *str='\0';
char *str1='\0';
int geshi2(int kuohao1,int geshu);//'}'情况处理函数
int geshi1(int kuohao);//'{'情况处理函数
int geshi3(int huanhang);//';'情况处理函数
int main()
{
scanf("%s",str);
int k=sizeof(str)/sizeof(char);
for(int i=0;i<=k;i++)//计算'{'数量为了缩进个数提供信息
{
if(str[i]=='{')
geshu++;
}
for(m=0;m<=k;m++)//把str中的内容复制到str1中,边复制边判断
{
str1[m]=str[m];
switch(str[m])
{
case ')':
{
m++;
str1[m]='\n';
}break;
case ';':
{
geshi3(huanhang);
}break;
case '}':
{str[m]='\0';
geshi2(kuohao1,geshu);
kuohao1++;
}break;
case '{':
{
str[m]='\0';
geshi1(kuohao);
kuohao++;

} break;
}
}
printf("%s\n",str1);
}
int geshi1(int kuohao)
{
for(int y=1;y<=4*kuohao;y++)//在‘{’前添加指定的空格
{
str1[m]=' ';
m++;
}
str1[m]='{';
m++;
for(int y=1;y<=4*kuohao;y++)//在‘{’后添加指定的空格
{
str1[m]=' ';
m++;
}
huanhang=4*kuohao+4;//为 ;前的语句提供空格数信息
}
int geshi2(int kuohao1,int geshu)
{
int gh=0;
gh=geshu-kuohao1+1;//第一个是缩进为‘{’缩进的最多的个数,越往后越少
for(int h=0;h<=4*gh;h++)
{
str1[m]=' ';
m++;
}
str1[m]='}';
m++;
}
int geshi3(int huanhang)
{
m++;
if(str[m]!='{'&&str[m]!='}')//如果后面为符号则不用添加‘{’和‘}’处理函数已经添加
for(int y=1;y<=huanhang;y++)//;后添加空格
{
str1[m]=' ';
m++;
}
str1[m]='\n';
} acm/c语言菜鸟


[解决办法]

#include<stdio.h>
#include<string.h>

void indent(char s[], int *offset, int ind);

int main()
{
char strSrc[1000];
char strDst[1000];
int numberOfForw = 0;
int cursor = 0;

gets(strSrc);

for(int m=0; m <= strlen(strSrc); m++)
{
switch(strSrc[m])
{
case ';':
strDst[cursor++] = strSrc[m];
strDst[cursor++] = '\n';
indent(strDst, &cursor, numberOfForw);
break;

case '}':
cursor -= 4;
strDst[cursor++] = strSrc[m];
strDst[cursor++] = '\n';
numberOfForw--;
indent(strDst, &cursor, numberOfForw);
break;

case '{':
if(strSrc[m-1] != ';'){
strDst[cursor++] = '\n';
indent(strDst, &cursor, numberOfForw);
}
strDst[cursor++] = strSrc[m];
strDst[cursor++] = '\n';
numberOfForw++;
indent(strDst, &cursor, numberOfForw);
break;

default:
strDst[cursor++] = strSrc[m];

}
strDst[cursor] = '\0';
}
printf("%s\n",strDst);
return 0;
}

void indent(char s[], int *offset, int ind){
int i;
for(i=0; i< 4 * ind; i++){
s[*offset] = ' ';
(*offset)++;
}
return;
}

lz是IMUT的?

读书人网 >C++

热点推荐