#include <stdio.h> #include <string.h> #include <stdlib.h> //#include <io.h> static unsigned int table[7][7]; void InitTable() { unsigned int i; unsigned int j; memset(table, 0, sizeof(table)); for(i=0; i<7; i++) { for(j=0; j<7; j++) if(i == 4 || i==3) table[i][j] = 3; else if(i==6) table[i][j] = 6; else table[i][j] = 0; } /* " 1 / 2 * 3 \ 4 \r,\n 6 其他 0*/ table[0][1] = 1; table[1][1] = 0; table[0][2] = 2; table[2][3] = 3; /*删除*/ table[3][3] = 4; /*删除*/ table[4][2] = 0; table[4][3] = 4; table[0][4] = 5; table[5][2] = 0; table[5][1] = 0; table[2][2] = 6; /*删除*/ table[6][6] = 0; } int DelComments(char* f, int len) { //int fsize; int cnt; char* buff; char* p; FILE *file; char c; int start; int input; char space; start = 0; space = ' '; cnt = 0; buff = (char*)malloc(sizeof(char)*1024*1024); memset(buff, 0, sizeof(sizeof(char)*1024*1024)); p = buff; file = fopen(f, "r+b"); //fseek(file, 0, SEEK_END); //fsize = ftell(file); //fseek(file, 0, SEEK_SET); if(file == NULL) { return -1; } InitTable(); while(fread(&c, sizeof(c), 1, file)) { cnt++; switch(c) { case '"': input = 1; break; case '/': input = 2 ; break; case '*': input = 3; break; case '\\': input = 4; break; case '\r': case '\n': input = 6; break; default: input = 0; break; } switch(start) { case 3: if(c=='\r' || c=='\n') *p++ = c; else *p++ = ' '; break; case 2: if(input == 3 || input == 2) { p--; *p++ = ' '; *p++ = ' '; break; } else { *p++ = c; break; } case 4: *p++ = ' '; break; case 6: if(input == 6) *p++ = c; else *p++ = ' '; break; default: *p++ = c; break; } start = table[start][input]; } fclose(file); file = fopen(f, "w+b"); if(!file) return -1; fwrite(buff, cnt, 1, file); fclose(file); free(buff); return 0; } int main(int argc, char** argv) { int fCnt; int i; char* p; char* q; int len; char params[MAXPARAMCNT][MAXFILENAMELEN]; if(argc <= 1 || argv == NULL) { return -1; } fCnt = argc - 1; memset(params, 0, sizeof(params)); for(i=1; i<argc; i++) { DelComments(argv[i], len); } return 0; }