您的位置:首页 > 其它

简易C程序格式化工具

2015-11-23 10:57 337 查看
#include <stdio.h>
#include <string.h>

char a[4096];

int main(int argc, char* argv[]) {

//open the souce file
char* name = argv[1];
FILE* r = fopen(name, "r");
int i=0;
while(fscanf(r,"%c",&a[i++])!=EOF)NULL;
a[i]=0;
int n=i;
fclose(r);

//replace table with ' '
for(i=0;i<n;i++) {
if(a[i]=='\t') a[i]=' ';
}

//delete replicated' '
int j;
for(i=1;i<n;i++) {
if(a[i]==' ' && a[i-1]==' ') {
for(j=i+1;j<=n;j++) {
a[j-1]=a[j];
}
n--;
}
}

// add \n after { or }
for(i=0;i<n;i++) {
if((a[i]=='{'|| a[i]=='}') &&(i+1<n && a[i+1]!='\n') ) {
if(a[i+1]!=' ') {
for(j=n;j>=i+1;j--) {
a[j+1]=a[j];
}
a[i+1]='\n';
n++;
}
else {
a[i+1]='\n';
}
}
}

//add \n before { or }
for(i=1;i<n;i++) {
if((a[i]=='{'|| a[i]=='}') &&(a[i-1]!='\n')) {
if(a[i-1]!='\n')  {
for(j=n;j>=i;j--) {
a[j+1]=a[j];
}
a[i]='\n';
n++;
}
else {
a[i-1]='\n';
}
}
}

//store the source code by rows
char b[1024][128];
int num=0;
j=0;
for(i=0;i<n;i++) {
if(a[i] != '\n') {
b[num][j] = a[i];
j++;
}
else {
b[num][j] = '\n';
j++;
b[num][j]=0;
num++;
j=0;
}
}
int lines=num;

//delete the start ' '
for(i=0;i<lines;i++) {
j=0;
while(b[i][j]==' ') j++;
int k=j;
while(b[i][j]) {
b[i][j-k]=b[i][j];
j++;
}
b[i][j-k]=b[i][j];
}

//format
num=0;
for(i=0;i<lines;i++) {
if(strlen(b[i])==1 && b[i][0]=='\n') {
continue;
}

for(j=0;j<strlen(b[i]);j++) {
if(b[i][j]== '}') {
num--;
break;
}
}

n = strlen(b[i]);
for(j=n;j>=0;j--) {
b[i][j+num*4]=b[i][j];
}

for(j=0;j<num*4;j++) {
b[i][j]=' ';
};

for(j=0;j<strlen(b[i]);j++) {
if(b[i][j]== '{') {
num++;
break;
}
}
}

//show && save the result
char s[128]="new_";
strcat(s,argv[1]);
FILE* w = fopen(s,"w");
for(i=0;i<lines;i++) {
if(strlen(b[i])==1 && b[i][0]=='\n') continue;
j=0;
while(b[i][j]) {
fprintf(w,"%c",b[i][j]);
putchar(b[i][j]);
j++;
}
}
fclose(w);
return 0;
}
输入:
#include <iostream>using namespace std;bool hasOne(int n) {     while(n>0) {if(n%10==3)return true;n=n/10;}return false;}int main(){int count=0;for(int i=0;i<=999999;++i){if(!hasOne(i))count++;}cout<<count<<endl;return 0;}
输出:
 ./a.out a.cpp #include <iostream>using namespace std;bool hasOne(int n) {    while(n>0)     {        if(n%10==3)        return true;        n=n/10;    }    return false;}int main(){    int count=0;for(int i=0;i<=999999;++i)    {        if(!hasOne(i))        count++;    }    cout<<count<<endl;    return 0;}
Author:段廷银
Date:2015.11.20
Email:clickyeah@yeah.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: