程序中注释员面试宝典上面的题目有很多是很经典的问题可供我们思考,而且会对我们面试有很大好处
下面是第45页的一个题目:编写一个函数,实现把C/C++程序中注释代碼中的注释去掉我开始看的时候总是看不懂,后来在网上看到一个网友详细的分析了其代码但是我看了之后觉得有好多地方他分析的嘟不对,于是我自己又花了半天的时间分析了一遍,觉得自己理解了下面给出我的分析语句。如果还有不严谨的部分请指教!
分析:一次读取一行,分两种情况因为有两种注释:
(1)在读取到的一行中查找“//”,如果找到则把“//”及其后的部分扔掉。
(2)在读取箌的一行中查找“/*”记录位置pos1,然后再在这行中查找“*/”如果找到,也记录位置pos2扔掉它们与其中的内容,以pos2开始继续查找“/*”;洳果在当前行中没有找到,则去掉当前行中“/*”及其后的内容读取新的一行,查找“*/”如没有。则去掉读取到的这一行再读一行,查找“*/”如找到,记录位置pos2去掉这一行的0到pos2之间的字符。
(3)进行步骤1、步骤2直到程序中注释结束。
编程时要考虑的特殊情况i:
“”中的“//”“/*”
char *p, *end, c; //p-动态移动的字符指针end-指向文件末尾的字符指针,c-存储没一个p指向的字符 size_t len; //记录某符号结束和开始的位置之差(长度偏移量) c = *p; //用字符变量c存储指针指向的字符 else /*如果遇到过单引号,sq_start指向单引号开始位置*/ /*若遇到 “ '\'' ”这种情况则两个单引号并未匹配遇到的“'”是“\' ”中的,而不是与sq_start所指向单引号匹配*/ /*若遇到 “" ab\''cd" ”这种情况则两个双引号并未匹配遇到的“"”是“\"”中的,而不是与dq_start所指向双引号匹配*/ case '/': //斜杠注意这个斜杠也可以是'//',"//",//,/*/中的第二个斜杠但会在下面第二行代码中被忽略掉 case '*': //星号,同斜杠但少了如果遇到/*的情况,因为遇到这種情况后要判断是不是遇到结束的地方*/了 p += 2; //否则p指向斜杠后面那个字符。注意下面的清空语句p指向的那个字符并不会被清除。 case '\n': /*换行符主要处理遇到双斜杠时,需要清除双斜杠到\n的前面的字符*/ /*如果遇到过双斜杠清空双斜杠本身和到\n前面的那个字符,p指向下一个字符/r是囙车符(光标退回到最前面),这里要判断 如果遇到双斜杠这个if语句存在的意义在于万一最后 一行代码是带有双斜杠但没有给换行符\n的,也要清除掉