C语言的注释分为两种,第一种:在一行源代码中“//”后的内容为注释内容。第二种:“/*”与“*/”之间的内容为注释内容。第三种:程序中只出现了“/*”,没有“*/”与之对应,那么将“/*”后的全部内容都要过滤掉。注意,只要是注释内容,那么注释内容中的字符应该全部忽略,即不起任何的作用。例如“/*”与“*/”之间如果再有“//”,那么“//”不应起作用;如果“//”再有“/*”,那么“/*”也不应起作用。
你的任务是先打开一个名字为dict.dic的文本文件,该文件中前5行每行为1个整数,从第6行开始为5段C语言的源代码。那5个数字代表这5段源代码结束的行数,比如如果第一行的整数为20,第二行的整数为60,则表示从第6行到第20为第一段代码,从第21行到第60为第二段代码。然后根据输入要求将源代码中所有注释过滤掉。
在本过滤注释系统中,你可以忽略源文件中双引号导致“//”、“/*”、“*/”失去作用的情况,即只要“//”、“/*”、“*/”不是注释内容,在任何情况下都起作用。
输入
只可能是1,2,3,4,5之一
输出
输入为1则输出第一段代码过滤后的结果,输入为2则输出第二段代码过滤后的结果,依此类推。
样例输入
1
样例输出
如果第一段代码是这样: /* @Author: BUPT @Date: 2010 8 26 */ #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; //I just want to test '/' printf("I love programming C.\n") ; //"printf" is a useful function /* printf("I hope you love it too!\n") ; /* //C is not always hard , if you love it , it will not treat you rough. */ return 0 ; } 则输出是这样: #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; printf("I love programming C.\n") ; printf("I hope you love it too!\n") ; return 0 ; }
一开始看错题了,有很多遗留下来的屎山.
#include <stdio.h>
#include <stdlib.h>
void five(int a[6], FILE* fp);
void skip(FILE* fp, int k);
void delete(FILE* fp, int k);
int main()
{
int i;
FILE* fp = fopen("dict.dic", "r");
int a[6] = { 0,0,0,0,0,0 };
five(a, fp);
a[4] = a[4] - a[3];
a[3] = a[3] - a[2];
a[2] = a[2] - a[1];
a[1] = a[1] - a[0];
a[0] = a[0] - 5;
int n = 7788;
scanf("%d", &n);
int sum = 0, key = a[n - 1];
for (i = 0; i < n - 1; i++)
sum += a[i];
skip(fp, sum);
delete(fp, key);
fclose(fp);
return 0;
}
void five(int a[6], FILE* fp)
{
char c;
for (int i = 0; i <= 4; i++)
{
c = fgetc(fp);
while (c != 10)
{
a[i] = a[i] * 10 + (c - '0');
c = fgetc(fp);
}
}
}
void skip(FILE* fp, int k)
{
char c;
while (k)
{
c = fgetc(fp);
while (c != 10)
c = fgetc(fp);
k--;
}
}
void delete(FILE* fp, int k)
{
char c, c2, c3, c4;
int mod = 0;// 0 ,1// ,2/*
while (1)
{
if (k <= 0)
break;
if (mod == 1)
{
while (c != 10)
c = fgetc(fp);
k--;
mod = 0;
printf("\n");
if (k <= 0)
return 0;
}
else if (mod == 2)
{
c3 = fgetc(fp);
c4 = fgetc(fp);
while (1)
{
if (c3 == '*' && c4 == '/')
break;
if (c3 == 10)
k--;
if (k <= 0)
return 0;
c3 = c4;
c4 = fgetc(fp);
}
mod = 0;
}
c = fgetc(fp);
if (c == 10)
{
k--;
if (k <= 0)
break;
}
if (c == '/')
{
c2 = fgetc(fp);
if (c2 == '/')
{
mod = 1;
continue;
}
else if (c2 == '*')
{
mod = 2;
continue;
}
else if (c2 == 10)
{
printf("%c%c", c, c2);
k--;
if (k <= 0)
break;
}
else
{
printf("%c%c", c, c2);
}
}
else
printf("%c", c);
}
}