描述
有时候就是这么奇怪,在那天晚上跟陈孝正杠上之前,郑微从来没有听说过,也没有发现过这个人的存在。当然,也许他曾无数次地从她身边擦肩而过,或许也曾有人有意无意地在她面前说起过这个名字,只不过当时的这个人和这个名字对于郑微来说毫无意义,所以她浑然未觉,然而当她开始留意这个家伙,才发现他无所不在。
本来建筑系和土木系就是一个学院的,彼此关系还算密切,又在同一栋教学楼,简直是抬头不见低头见。而且郑微还惊讶地发现,这家伙居然还小有名气,院里不少人都听说过他,无非是去年高分录取的状元,成绩挺不错,曾在建筑模型设计比赛中获奖之类的。跟阮阮说的大同小异,工程图学的那个老学究也在课堂上提起过他,俨然一副得意门生的口吻,就连卧谈会上她也曾经从黎维娟(郑薇的室友)的嘴里听到过他的名字,一向心高气傲的黎维娟竟然也对他颇为向往。
到底郑薇跟陈孝正是如何杠上的呢?其实是一份C语言程序代码!请把这份C语言代码的注释去除掉。
输入
输入数据中含有一些符合C语言语法的代码行。
输出
输出不含有双斜杠注释的C语言代码,除了注释代码之外,原语句行格式不变,行尾也不应有空格。如果整一行只有注释,那么你应该忽略这一行。
输入样例 1
//======================
// simplest program
//======================
#include<stdio.h>
#include<math.h>
//----------------------
int main(){
printf("My World!\n");
return 0;
}//---------------------
输出样例 1
#include<stdio.h>
#include<math.h>
int main(){
printf("My World!\n");
return 0;
}
此题需要考虑到正文页可能有“//”,;例如:printf("…//…"),此时这里的//需要输出,如果不是正文中出现的,注释则需要取消。
其次,需要考虑换行问题,这里我用的是puts("");用puts("\0")也可以实现。倘若没有此语句,下一次输入字符串则会出现在同一行,puts("\n")与前两种实现的效果有点不同,可以自行编译进行理解。
同时,我用到了flag与flag1来标记,控制puts("")的输出,来控制光标移动到下一行。
下面是AC代码的具体实现:
#include <stdio.h>
#include <string.h>
int main()
{
int i,j;
char a[10000];
while (gets(a)) //连续输入多个字符串
{
int l=strlen(a),flag=0,flag1=0;//flag表示一行中有注释,flag1表示一行中有注释并且有正文
for (i = 0; i < l; i++) //遍历输入这一串字符
{
if (a[i] == '/'&&a[i + 1] == '/') //如果这串字符中出现"//",要考虑两种情况
{ //1.可能为注释 2.可能是正文,如:printf("...//...")
int m = 0, n = 0; //下面就用判断是否属于正文
for (j = i; j >= 0; j--)
if (a[j] == '"') //如果出现"//",遍历前面是是否有引号
m = 1;
for (j = i + 2; j < l; j++) //遍历后面是否有引号
if (a[j] == '"')
n = 1;
if (m&&n) //如果前后都有引号证明是正文
{
printf("/"); //输出引号
continue;
}
flag = 1; //只要出现"//"就标记
if(i>0)
flag1 = 1; //只要不是第一个字符就出现/,那么就标记,如果是后面出现//,可能为注释或正文,前面都必须有其他字符输出
break; // 如果出现"//"但又不是正文,则为注释,直接跳出,进行下一个字符串输入
}
printf("%c", a[i]);
}
if (!flag||flag1) //如果是正文,输出之后需要让光标移动到下一行再进行输入
puts(""); //特别注意:这里puts("")实际上是输出一个字符长度为0,由于每个字符串都是以"\0"结束,因此在这里两者是等效的
if (flag&&!flag1) //如果是注释,则无需进行以上处理
continue;
}
return 0;
}
希望我的文章可以帮助你更好地理解哦!
如果有什么错误的话,还请批评指正,嘻嘻!