| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 633 人关注过本帖
标题:acm试题求帮忙改错,”代码格式修改程序“
只看楼主 加入收藏
shilec
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
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++)
{
str1[m]=str[m];
switch(str[m])
{
 case '(':case ')':
 {
  m++;
  str1[m]='\n';
 }break;
 case ';':
 {
 geshi3(huanhang);
 }break;
 case '}':
 {
 geshi1(kuohao);
 kuohao++;
 }break;
 case '{':
 {
 geshi2(kuohao1,geshu);
     kuohao1++;
 } 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++;
 for(int y=1;y<=huanhang;y++)//括号为一开始
{
 str1[m]=' ';
 m++;
}
str1[m]='\n';
}
搜索更多相关主题的帖子: include 
2013-05-04 19:38
weipeng1217
Rank: 5Rank: 5
等 级:职业侠客
帖 子:175
专家分:386
注 册:2012-1-12
收藏
得分:0 
题目贴过来。。

C坛友交流群 群号:161091913 ,欢迎经常在线的朋友加入,一起学习,一起进步。。
2013-05-04 19:53
shilec
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-2
收藏
得分:0 
输入一行源代码整理成标准格式的代码,
例如input: int main(){。{。。。{a+b=1;}}。。}
output: int main()
{
    {
           {
                  a+b=1;
            }
     }
}
注意:缩进的空格为四个为一个单位。
这就是题目,其他那些废话就不大了

2013-05-04 19:56
shilec
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-2
收藏
得分:0 
#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';
}
2013-05-04 19:57
weipeng1217
Rank: 5Rank: 5
等 级:职业侠客
帖 子:175
专家分:386
注 册:2012-1-12
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <windows.h>

char word[1000];
void gettw();
void printfw();
void tt(int n);

int main(int argc,char* argv[])
{
    gettw();
    printfw();
    system("pause");
    return 0;
}

void gettw()
{
    gets(word);
}

void printfw()
{
    int i,t=0,x=0,a=0;
    for(i=0;word[i]!='\0';i++)
    {        
        if(word[i]=='m'&&word[i+1]=='a'&&word[i+2]=='i'&&word[i+3]=='n'&&x==0)
            x=1;
        else if(word[i]=='('&&x==1)
        {
            a++;
        }
        else if(word[i]==')'&&x==1)
        {
            a--;
            if(a==0)
            {
                printf("%c\n",word[i]);
                x=0;
                continue;
            }
        }
        else if(word[i]=='{')
        {
            t++;
            printf("%c\n",word[i]);
            tt(t);
            continue;
        }
        else if(word[i]=='}')
        {
            t--;
            printf("%c\n",word[i]);
            tt(t-1);
            continue;
        }
        printf("%c",word[i]);
        if(word[i]==';')
        {
            printf("\n");
            if(word[i+1]!='}')
                tt(t);
            else
                tt(t-1);
        }
    }
}

void tt(int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("\t");
    }
}

C坛友交流群 群号:161091913 ,欢迎经常在线的朋友加入,一起学习,一起进步。。
2013-05-05 00:42
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
感觉好难= =
2013-05-05 09:38
shilec
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-2
收藏
得分:0 
回复 5楼 weipeng1217
谢谢,参考下思路
2013-05-05 10:40
weipeng1217
Rank: 5Rank: 5
等 级:职业侠客
帖 子:175
专家分:386
注 册:2012-1-12
收藏
得分:20 
回复 7楼 shilec
昨晚的程序,如果在输入的时候有多个空格,会影响显示,
如:
int main  (     ){    {   123    ;    124   ;}}


做了一点改进,合并多个空格
程序代码:
#include <stdio.h>
#include <windows.h>

char word[1000];
void gettw();
void printfw();
void tt(int n);

int main(int argc,char* argv[])
{
    gettw();
    printfw();
    system("pause");
    return 0;
}

void gettw()
{
    gets(word);
}

void printfw()
{
    int i,t=0,x=0,a=0,k=0;
    for(i=0;word[i]!='\0';i++)
    {        
        if(word[i]=='m'&&word[i+1]=='a'&&word[i+2]=='i'&&word[i+3]=='n'&&x==0)
            x=1;
        else if(word[i]=='('&&x==1)
        {
            a++;
        }
        else if(word[i]==')'&&x==1)
        {
            a--;
            if(a==0)
            {
                printf("%c\n",word[i]);
                x=0;
                continue;
            }
        }
        else if(word[i]=='{')
        {
            t++;
            printf("%c\n",word[i]);
            tt(t);
            continue;
        }
        else if(word[i]=='}')
        {
            t--;
            printf("%c\n",word[i]);
            tt(t-1);
            continue;
        }

        else if(word[i]==' ')//多空格合并成一个
        {
            if(k==0)
            {
                printf("%c",word[i]);
                k=1;
                continue;
            }
            continue;
        }
        else if(word[i]==' '&& word[i+1]!=' ')
            k=0;
        printf("%c",word[i]);
        if(word[i]==';')
        {
            printf("\n");
            if(word[i+1]!='}')
                tt(t);
            else
                tt(t-1);
        }
    }
}

void tt(int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("\t");
    }
}

C坛友交流群 群号:161091913 ,欢迎经常在线的朋友加入,一起学习,一起进步。。
2013-05-05 11:07
shilec
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-2
收藏
得分:0 
回复 8楼 weipeng1217
非常感谢,我写的是把所有代码格式化后保存到串中输出,你的是直接输出字符并格式,我的太麻烦了,没想到那点,学习了,非常感谢
2013-05-05 11:28
快速回复:acm试题求帮忙改错,”代码格式修改程序“
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022696 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved