zoukankan      html  css  js  c++  java
  • C、C++代码格式优化软件献给编程爱好者

    当题目不会做或者算法实现不了时,我们很自然地去网上搜代码,但是网上的代码排版太乱,根本不遵循代码规范,举个例子:大家可以点击这个链接http://tieba.baidu.com/f?kz=825544513,,这里有个代码,

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    { char a[100],b[1000];
    int k,i,j,t=0,la,lb;
    scanf("%d",&k);
    while(t<k)
    {
    scanf("%s",a);
    scanf("%s",b);
    printf("Case %d:\n",++t);
    printf("%s + %s = ",a,b);
    la=strlen(a);
    lb=strlen(b);
    char c[1000];
    if(la<lb)
    { strcpy(c,a); strcpy(a,b); strcpy(b,c);
    int c=la; la=lb; lb=c;
    }
    for(i=0;i<la/2;++i)
    { int c=a[i]-48;
    a[i]=a[la-i-1]-48;
    a[la-i-1]=c;
    }
    if(la&1) a[la/2]-=48;
    for(j=0;j<lb/2;++j)
    { int c=b[j]-48;
    b[j]=b[lb-j-1]-48;
    b[lb-j-1]=c;
    }
    if(lb&1) b[lb/2]-=48;
    bool flag=0;
    for(i=lb;i<=la;++i)
    b[i]=0;
    for(i=0;i<la;++i)
    {
    c[i]=a[i]+b[i]+flag;
    flag=c[i]/10; c[i]=c[i]%10;
    }
    if(flag) cout<<1;
    for(i=la-1;i>=0;--i)
    printf("%d",c[i]);
    cout<<endl;
    if(t!=k)
    cout<<endl;
    }
    return 0;
    }

    怎么样??这种代码一看就心烦,一点格式都没有,他提问都一年多了,,都没人回答,估计就是这个原因。
    但是,如果这是我们需要的代码怎么办??一点一点地补齐空格,相当麻烦,如果代码再长点呢,几百上千行,估计没人会有耐心再看这个代码
    这就是问题的由来。为了解决这个问题,我专门写了这个软件,如果仅仅是缩进,这个简单,我想,,既然写了,就把它完善到最好。以后我们进了软件公司,估计首先得到的就是一份代码规范(关于代码规范,大家可以到这个网站看一下http://wenku.baidu.com/view/f6a3341dfc4ffe473368abce.html)代码规范很重要,因为在公司里,大部分时间是用来看别人的代码,如果写成一堆乱麻,公司怎么会要你??有一个不规范的地方扣100元钱,估计工资都扣没了。有些人写代码写了好几年了,习惯不能一下子改过来,怎么办?为了规范再去检查代码吗?哈哈,我的软件就派上用场了,你只要用我的软件一优化,立马丑小鸭变天鹅,一个规范的代码就出来了,哈哈,就是这么有用!先看看上面的代码被我的软件优化后的效果

    #include <iostream>
    #include <string.h>
    using namespace std;
    int main()
    {
    char a[100], b[1000];
    int k, i, j, t = 0, la, lb;
    scanf("%d", &k);
    while(t < k)
    {
    scanf("%s", a);
    scanf("%s", b);
    printf("Case %d:\n", ++t);
    printf("%s + %s = ", a, b);
    la = strlen(a);
    lb = strlen(b);
    char c[1000];
    if(la < lb)
    {
    strcpy(c, a); strcpy(a, b); strcpy(b, c);
    int c = la; la = lb; lb = c;
    }
    for(i = 0; i < la/2; ++i)
    {
    int c = a[i]-48;
    a[i] = a[la-i-1]-48;
    a[la-i-1] = c;
    }
    if(la&1) a[la/2] -= 48;
    for(j = 0; j < lb/2; ++j)
    {
    int c = b[j]-48;
    b[j] = b[lb-j-1]-48;
    b[lb-j-1] = c;
    }
    if(lb&1) b[lb/2] -= 48;
    bool flag = 0;
    for(i = lb; i <= la; ++i)
    b[i] = 0;
    for(i = 0; i < la; ++i)
    {
    c[i] = a[i] + b[i] + flag;
    flag = c[i]/10; c[i] = c[i]%10;
    }
    if(flag) cout << 1;
    for(i = la-1; i >= 0; --i)
    printf("%d", c[i]);
    cout << endl;
    if(t != k)
    cout << endl;
    }
    return 0;
    }

    怎么样??还不错吧。说明一下,我的软件不仅仅是在行首补上空格,更重要的是对行里面的代码格式也进行了优化,这是一些ide所不能比的,完全是参考代码格式标准进行优化的,例如“<=”“=”“==”“>=”“<<”“>>”“+”“-”“*”“/”“%”“!=”等符号左右都补全空格,“[]”“()”等里面都消除空格,{}严格对齐,“”引号里面的内容不做修改,保证输出格式正确,还有把代码中的空行删除……更多细节大家可以研究一下代码,下面把我的的劳动成果无偿献给大家

    View Code 查看代码
      1 /*************************************************************************
    2 > File Name: 代码格式优化软件.cpp
    3 > Author: ma6174
    4 > Mail: ma6174@163.com
    5 > Created Time: 2011年11月18日 星期五 16时37分09秒
    6 ************************************************************************/
    7 #include <stdio.h>
    8 #include <stdlib.h>
    9 #include <string.h>
    10 void welcome()
    11 {
    12 printf("\t\t\t C、C++ 代码格式优化软件\n");
    13 printf("\t\t\t\tBY ma6174\n");
    14 printf("\t\t\t ma6174@163.com");
    15 printf("\n使用方法:\n\n");
    16 printf("先将你要优化的代码复制到这里,\n\n按一下回车键,然后按“Ctrl + Z”组合键,再按一下回车,你就能看到漂亮的代码啦\n");
    17 for(int i = 0; i < 80; i++)
    18 printf("=");
    19 printf("\n\n");
    20 }
    21 int main()
    22 {
    23 welcome();
    24 char a[1000];
    25 int i, len, tab = 0, j, flag = 0, tag = 0; //flag标记是否是注释
    26 FILE *fp;
    27 fp = fopen("temp.txt", "w");
    28 if(fp == NULL)
    29 {
    30 printf("文件打开失败");
    31 exit(1);
    32 }
    33 while(gets(a))
    34 {
    35 j = 0;
    36 len = strlen(a);
    37 while(j < len && (a[j] == ' ' || a[j] == '\t'))
    38 j++;
    39 if(j >= len)
    40 continue;
    41 i = 0;
    42 //消除行首所有空格和制符表
    43 while(a[i] == ' ' || a[i] == '\t')
    44 i++;
    45 //行首为#
    46 if(a[i] == '#')
    47 {
    48 while(a[i] == ' ' || a[i] == '\t')
    49 i++;
    50 for(; i < len; i++)
    51 {
    52 //文件包含补空格
    53 if((a[i] == '<' || a[i] == '"') && a[i-1] != ' ')
    54 fprintf(fp, " ");
    55 fprintf(fp, "%c", a[i]);
    56 }
    57 fprintf(fp, "\n");
    58 continue;
    59 }
    60 //行首补全空格
    61 if(a[i] == '}' && !flag)
    62 tab--;
    63 for(j = 1; j <= 4*tab; j++)
    64 fprintf(fp, " ");
    65 //第一个字母既是}则直接输出
    66 if(a[i] == '}')
    67 {
    68 fprintf(fp, "}");
    69 i++;
    70 }
    71 if(a[i] == '{' && a[i-1] != '\'' && a[i + 1] != '\'' && a[i-1] != '"' && a[i + 1] != '"')
    72 {
    73 fprintf(fp, "{");
    74 int j = i + 1;
    75 while(j < len && (a[j] == ' ' || a[j] == '\t'))
    76 j++;
    77 tab++;
    78 if(j >= len)
    79 {
    80 fprintf(fp, "\n");
    81 i = j;
    82 continue;
    83 }
    84 fprintf(fp, "\n");
    85 i = j;
    86 for(int k = 1; k <= 4*tab; k++)
    87 fprintf(fp, " ");
    88 }
    89 int k = i;
    90 //处理后续元素
    91 for(; i < len; i++)
    92 {
    93 //删除程序中的多余空格,只保留一个
    94 while(a[i] == ' ' && a[i + 1] == ' ' || a[i] == '\t' && a[i + 1] == '\t')
    95 {
    96 i++;
    97 }
    98 //出现注释,,直接原样输出
    99 if(flag)
    100 {
    101 while(i < len)
    102 {
    103 if(a[i] == '*' && a[i + 1] == '/')
    104 flag = 0;
    105 fprintf(fp, "%c", a[i]);
    106 i++;
    107 }
    108 continue;
    109 }
    110 //标记注释flag
    111 if(a[i] == '/' && a[i + 1] == '*')
    112 {
    113 flag = 1;
    114 while(i < len)
    115 {
    116 if(a[i] == '*' && a[i + 1] == '/')
    117 flag = 0;
    118 fprintf(fp, "%c", a[i]);
    119 i++;
    120 }
    121 continue;
    122 }
    123 //双斜线注释直接原样输出
    124 if(a[i] == '/' && a[i + 1] == '/')
    125 {
    126 while(i < len)
    127 {
    128 fprintf(fp, "%c", a[i]);
    129 i++;
    130 }
    131 continue;
    132 }
    133 //处理“”内的内容
    134 if(a[i] == '"' && a[i-1] != '\'' && a[i + 1] != '\'')
    135 {
    136 while(a[i + 1] != '"')
    137 {
    138 fprintf(fp, "%c", a[i]);
    139 i++;
    140 }
    141 fprintf(fp, "%c%c", a[i], a[i + 1]);
    142 i++;
    143 continue;
    144 }
    145 //处理 '
    146 if(a[i] == '\'' && a[i + 2] == '\'')
    147 {
    148 fprintf(fp, "%c%c%c", a[i], a[i + 1], a[i + 2]);
    149 i += 2;
    150 continue;
    151 }
    152 // "{" 换行,若在引号内则不换行
    153 if(a[i] == '{' && a[i-1] != '\'' && a[i + 1] != '\'' && a[i-1] != '"' && a[i + 1] != '"')
    154 {
    155 if(i != k)
    156 {
    157 fprintf(fp, "\n");
    158 tag = 1;
    159 }
    160 if(tag == 0)
    161 for(j = 1; j <= 4*(tab-1);j++)
    162 fprintf(fp, " ");
    163 else
    164 if(tag == 1)
    165 for(j = 1; j <= 4*tab; j++)
    166 fprintf(fp, " ");
    167 fprintf(fp, "{");
    168 j = i + 1;
    169 while(j < len && (a[j] == ' ' || a[j] == '\t'))
    170 j++;
    171 if(j >= len)
    172 {
    173 for(j = 1; j <= 4*(tab + 1);j++)
    174 fprintf(fp, " ");
    175 while(a[i + 1] == ' ')
    176 i++;
    177 }
    178 else
    179 {
    180 fprintf(fp, "\n");
    181 for(j = 1; j <= 4*(tab + 1);j++)
    182 fprintf(fp, " ");
    183 }
    184 tab++;
    185 continue;
    186 }
    187 //处理'}'
    188 if(a[i] == '}' && a[i + 1] == '}')
    189 {
    190 fprintf(fp, "}\n");
    191 tab--;
    192 for(j = 1; j <= 4*(tab-1);j++)
    193 fprintf(fp, " ");
    194 fprintf(fp, "}");
    195 tab--;
    196 i++;
    197 continue;
    198 }
    199 if(a[i] == '}' && a[i-1] != '\'' && a[i + 1] != '\'' && a[i-1] != '"' && a[i + 1] != '"')
    200 {
    201 j = i + 1;
    202 while(j < len && (a[j] == ' ' || a[j] == '\t'))
    203 j++;
    204 if(j >= len)
    205 {
    206 if(k != i)
    207 fprintf(fp, "\n");
    208 for(j = 1; j <= 4*(tab-1);j++)
    209 fprintf(fp, " ");
    210 }
    211 fprintf(fp, "}");
    212 tab--;
    213 continue;
    214 }
    215 //以下处理其他字符
    216 if((a[i] == ')' || a[i] == ',' || a[i] == ';') && ((a[i + 1] == ')' || a[i + 1] == ';')))
    217 {
    218 fprintf(fp, "%c%c", a[i], a[i + 1]);
    219 i++;
    220 continue;
    221 }
    222 if(a[i] == ')' || a[i] == ',' || a[i] == ';')
    223 {
    224 fprintf(fp, "%c", a[i]);
    225 if(i != len-1 && a[i + 1] != ' ')
    226 fprintf(fp, " ");
    227 continue;
    228 }
    229 if(a[i] == '-' && a[i + 1] == '-' || a[i] == '+' && a[i + 1] == '+')
    230 {
    231 fprintf(fp, "%c%c", a[i], a[++i]);
    232 continue;
    233 }
    234 if(a[i] == '=' && a[i + 1] == '=' || a[i] == '&' && a[i + 1] == '&' || a[i] == '|' && a[i + 1] == '|' || a[i] == '!' && a[i + 1] == '=')
    235 {
    236 if(a[i-1] != ' ')
    237 fprintf(fp, " ");
    238 fprintf(fp, "%c%c", a[i], a[i + 1]);
    239 if(a[i + 2] != ' ')
    240 fprintf(fp, " ");
    241 i++;
    242 continue;
    243 }
    244 if(a[i] == '!' || a[i] == '~' || a[i] == '&')
    245 {
    246 fprintf(fp, "%c", a[i]);
    247 while(a[i + 1] == ' ')
    248 i++;
    249 continue;
    250 }
    251 if(a[i] == ' ' && (a[i + 1] == '[' || a[i + 1] == '.'))
    252 {
    253 i++;
    254 fprintf(fp, "%c", a[i]);
    255 continue;
    256 }
    257 if(a[i] == '-' && a[i + 1] == '>')
    258 {
    259 if(a[i-1] != ' ')
    260 fprintf(fp, " ");
    261 fprintf(fp, "%c%c", a[i], a[i + 1]);
    262 if(a[i + 2] != ' ')
    263 fprintf(fp, " ");
    264 i++;
    265 continue;
    266 }
    267 if((a[i] == '%' || a[i] == '-' || a[i] == '+' || a[i] == '*' || a[i] == '\\' || a[i] == '>' || a[i] == '<') && a[i + 1] == '=')
    268 {
    269 if(a[i-1] != ' ')
    270 fprintf(fp, " ");
    271 fprintf(fp, "%c%c", a[i], a[i + 1]);
    272 if(a[i + 2] != ' ')
    273 fprintf(fp, " ");
    274 i++;
    275 continue;
    276 }
    277 if(a[i] == '>' && a[i + 1] == '>' || a[i] == '<' && a[i + 1] == '<')
    278 {
    279 if(a[i-1] != ' ')
    280 fprintf(fp, " ");
    281 fprintf(fp, "%c%c", a[i], a[i + 1]);
    282 if(a[i + 2] != ' ')
    283 fprintf(fp, " ");
    284 i++;
    285 continue;
    286 }
    287 if((a[i] == '=' || a[i] == '+' || a[i] == '^' || a[i] == '<' || a[i] == '>') && a[i-1] != '\'' && a[i + 1] != '\'' && a[i-1] != '"' && a[i + 1] != '"')
    288 {
    289 if(a[i-1] != ' ')
    290 fprintf(fp, " ");
    291 fprintf(fp, "%c", a[i]);
    292 if(a[i + 1] != ' ')
    293 fprintf(fp, " ");
    294 continue;
    295 }
    296 fprintf(fp, "%c", a[i]);
    297 }
    298 fprintf(fp, "\n");
    299 }
    300 fclose(fp);
    301 system("start temp.txt");
    302 return 0;
    303 }

    可能有些地方考虑不完善,请大家批评指出。
    生成的可执行文件大家可以到我的网盘下载:http://ma6174.ys168.com/

  • 相关阅读:
    zoj 3644 Kitty's Game
    Planets
    hdoj 2571 命运
    (理论篇)IOC概述和Unity的使用
    重温设计模式之单例模式
    重温设计模式之观察者
    重温设计模式之装饰者
    (理论篇)PetShop全概述
    (理论篇)petshop中缓存运用之我见
    (理论篇)cookie,session,viewstate,cache
  • 原文地址:https://www.cnblogs.com/ma6174/p/2277998.html
Copyright © 2011-2022 走看看