但对于/*
*/还不能实现。
程序中有两点错误:
1,字谨孝符'\'要写成转义符
2,while条件不正确
对程序修改如下:
#include
#include
#include
#include
void
main()
{
char
ch,ch3
char
ch1
char
ch2
FILE
*r
FILE
*w
r=fopen("f:\\a.txt","r")
w=fopen("f:\\b.txt","w")
ch1=fgetc(r)
while(ch1!=EOF)
{
ch2=fgetc(r)
if(ch1=='\\'&&ch2==祥碰稿'\\')
//这里------
{
do
{
ch3=fgetc(r)
}while(ch3!='\n')
//这里------
}
else
{
fputc(ch1,w)
fputc(ch2,w)
}
ch=fgetc(r)
ch1=ch
}
}
分别做2次处理。第一次处理 //
第二次处理 /* ..*/ ...
第一次处理 用fgets()
while (!feof(fin)){
if ( fgets(one_line,1023,fin)==NULL) break
len = strlen(one_line)
for (i=0i<len-1i++){
if (one_line[i]=='/' &&one_line[i+1]=='/'){
one_line[i] = '\0'break
}}// for i
if (i>0) fprintf(fout,"%s",one_line)
if (i<len-1) fprintf(fout,"\n")
}
------------------------
第二次处理 用 fgetc()
设初始状态 flag = 0
loop:
读一个字符c1
读下一个字符c2
连续读到的两个字符不是 /* 时, 输出c1,c2赋给c1,再 读下一个字符给c2, (如果c2是EOF则输出c1,程序结束。)直到 连续晌帆读到的两个字符禅配是宴袭雹 /*
flag = 1
接下,不输出,只读,直到 连续读到的两个字符是*/
flag = 0
goto loop
1、少了很多大括号,包括while的,if else的2、while(feof(fp1)!=EOF) 最好改为while(!feof(fp1))
3、我改后测了一下,这个程序只能删除“/* */”的注释,对“//”的注释无效。再改一下状态机吧。
4、下面的程粗橘序我把格式整理了一下拍凳笑,没改什么算法部分。写程序要规范。
#include "stdio.h"
void delcomm(FILE*fp1,FILE*fp2)
{
char c
int i=0
while(!feof(fp1))
{
printf("test\n")
if((c=fgetc(fp1))=='\n')
fprintf(fp2,"\n")
else
{
switch(i)
{
case 0:
if (c=='/')
i=1
else
fprintf(fp2,"%c",c)
break
case 1:
if (c=='*')
i=2
else
{
fprintf(fp2,"袭含/%c",c)
i=0
}
break
case 2:
if (c=='*')
i=3
break
case 3:
i=(c=='/')?0:2
break
}
}
}
}
int main()
{
FILE*fp1,*fp2
if ((fp1=fopen("/home/hxl/test/md5.c","r"))==NULL)
{
printf("wrong!")
exit(0)
}
fp2=fopen("/home/hxl/test/md5out.c","w")
delcomm(fp1,fp2)
fcloseall()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)