满意答案
q5804100
推荐于 2018.05.15
采纳率:56% 等级:11
已帮助:7110人
我以前写了一个,功能都实现了,但就是执行后,程序格式有点不够整齐,所以只可以给你参考
#include
#include
#include
#define SIZE 100int mode = 0;
//char *deal(char *buf,)
void delete(int argc,char **argv) {
if(2 != argc) {
printf("usage:%s file\n",argv[0]);
exit(-1);
}
FILE *fp0 = fopen(argv[1],"r+");
if(NULL == fp0) {
perror("fopen file");
exit(-1);
}
FILE *fp1 = tmpfile();
if(NULL == fp1) {
perror("fopen temp");
exit(-1);
}
int i=0;
char c,buf[3];
while((c=fgetc(fp0)) != EOF) {
buf[i] = c;
switch(mode) {
case 0:
if('/' == c) {
mode = 1;
} else if('"' == c) {
mode = 2;
} else {
fputc((int)c,fp1);
}
break;
case 1:
if('/' == c) {
mode = 4;
}
else if('*' == c) {
mode = 5;
}
else {
fputc('/',fp1);
mode = 0;
if('"' == c) {
mode = 2;
}
else {
fputc((int)c,fp1);
}
}
break;
case 2:
if(39 == buf[i]&&39 == buf[(i+1)%3]) {
mode = 0;
fputc('"',fp1);
fputc(39,fp1);
}
else {
fputc('"',fp1);
fputc((int)c,fp1);
mode = 3;
if('"' == c) {
mode = 0;
}
}
break;
case 3:
fputc((int)c,fp1);
if('"' == c) {
mode = 0;
}
break;
case 4:
if('\n' == c) {
mode = 0;
}
break;
case 5:
if('*' == c) {
mode = 6;
}
break;
case 6:
printf("%c",c);
if('/' == c) {
mode = 0;
} else {
mode = 5;
}
break;
default:
printf("program wrong!\n");
exit(-1);
}
i++;
i%=3;
}
fclose(fp0);
fp0 = fopen(argv[1],"w+");
if(NULL == fp0) {
perror("fopen file");
exit(-1);
}
rewind(fp1);
char a[SIZE];
memset(a,0,sizeof(a));
while(i = fread(a,1,99,fp1)) {
fwrite(a,1,i,fp0);
}
fclose(fp0); fclose(fp1);
}
int main(int argc,char **argv) { delete(argc,argv);
return 0;
}
04分享举报