永发信息网

将一个C 语言源程序文件中所有注释去掉后,存入另一个文件。

答案:4  悬赏:60  手机版
解决时间 2021-03-23 06:06
将一个C 语言源程序文件中所有注释去掉后,存入另一个文件。
最佳答案
我以前写了一个,功能都实现了,但就是执行后,程序格式有点不够整齐,所以只可以给你参考
#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;
}
全部回答
#include
int main()
{
FILE *fp1, *fp2;
char num[1000];
int i = 0;
if ((fp1 = fopen("text1.txt", "r+")) == NULL)
printf("wrong - ---- text1.txt");
if ((fp2 = fopen("text2.txt", "r+")) == NULL)
printf("wrong _____text2.txt");
for (i = 0; i < 1000; i++)
{
num[i] = fgetc(fp1);
}
i = 0;
while (i!= 1000)
{
if(num[i] == '/')
if (num[i + 1] == '/')
{
num[i] = NULL;
num[i + 1] = NULL;
}
if(num[i] == '*')
if (num[i + 1] == '/')
{
num[i] = NULL;
num[i + 1] = NULL;
}
if(num[i] == '/')
if (num[i + 1] == '*')
{
num[i] = NULL;
num[i + 1] = NULL;
}

i++;
}
for (i = 0; i < 1000; i++)
fputc(num[i], fp2);
//fprintf(fp2, "%s", num);
fclose(fp1);
fclose(fp2);
return 0;
}
(⊙_⊙)?
你的意思是用程序删掉?还是手动删掉?
比对// 跟
读源程序,建新文件,比对之后存入新文件,//之后的内容不存,直到换行,
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
---YouspeakEnglishwell.Whoteachesyou?---No
剑三唐门大师兄在哪,唐小夕在唐家堡附近的位
函授考试都考什么?
丹诗戈舞蹈用品专卖店怎么去啊,有知道地址的
吐尔逊江饭庄我想知道这个在什么地方
引起起动机空转的原因,踏板摩托车电打火,有
如图所示,已知△ABC与△BDE都是等到边三角形
祥泰酒业我想知道这个在什么地方
自制葡萄酒放单晶冰糖好还是普通的冰糖好
初中毕业诗歌赞颂老师,描写白杨树的诗歌
一物体自t=0时刻开始作自由落体运动,在下落
钱伟不锈钢地址在哪,我要去那里办事
朔州火车站到天锦园酒店坐几路公交车
从“子见南子,子路不说。夫子矢之曰:‘予所
请问省级人口普查是几年一次
推荐资讯
中锋在比赛时做什么
养兔子要在什么环境
有一批大米运往灾区,4车运走了,剩下的大米
2017年藏区1+2好久录取
假如我买了一百块钱的东西,缴税的话我得交多
电脑屏幕打不开一直飘着1440x900
手机不小心摔坏了,屏幕坏了,告诉父母又怕他
濮阳县濮阳申通快递这个地址在什么地方,我要
求下段代码的注释~~~(图片切换效果代码的注
深圳卫视军情直播间那个女主持人叫什么名字
汽车突然转弯没有打转向灯,电动车追尾是谁的
保持洁净安全的生存环境已成为全人类的共识,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?