题目:

将C/C++代码中的注释通过程序删除。

分析:

C/C++中的代码注释,包括如下形式://, /* */。

当然,在""和''中的//, /* */是无效的,不应删除。

因此,可以考虑针对/, *, ", '加标志flag1, flag2, flag3, flag4:

1)遇到/时,读取下一个字符,如果是/时,则将当前行删除;如果是*,记录当前位置,找到*/,然后删除之间的字符;

2)遇到"或者'时,flag3, flag4置为true,在"或'中的注释忽略掉。

代码如下:

//============================================================================
// Name        : DeleteComments.cpp
// Author      :
// Version     :
// Copyright   : All rights reserved
// Description : 去掉C/C++程序中的注释
//       1. //...
//       2. /*... */
//       3. 特殊情况:
//         (1) "//"  "/*" 不算注释
//         (2) ''中的//和/*
//         (3) 二者互相嵌套
//============================================================================#include <iostream>
#include <fstream>
using namespace std;
void deleteComments(char *, int);int main() {string filename;cout << "Please enter name for a cpp file:" << endl;cin >> filename;ifstream fin;try {fin.open(filename.c_str());} catch(std::exception &e){cout << e.what() << endl;}if (fin.is_open()){cout << "Open " << filename << " successfully!" << endl;}char buf[102400];int n = fin.readsome(buf, sizeof(buf));//read(buf, sizeof(buf));if (n == -1){fin.close();}deleteComments(buf, n);cout << "After Dealing: " << endl << buf <<endl;return 0;
}void deleteComments(char* buf, int n)
{char *p, *end, c;p = buf;end = buf + n;char *pos1 = NULL, *pos2 = NULL;bool flag1 = false, flag2 = false;// "   and   'int flag3 = 0, flag4 = 0, flag5 = 0;// for /*...     //...      */while( p < end){c = *p;cout << "new char: " << c <<endl;switch(c){case '"':{if (flag3 == 0)flag1 = (flag1 == true)?false:true;p ++;} break;case '\'':{if (flag3 == 0)flag2 = (flag2 == true)?false:true;p ++;} break;case '/':{p ++;if (*p == '/' && (flag3 == 0))    // ..... //....{p ++;cout << "in // " << endl;cout << " falg3: " << flag3 << "  flag5: " << flag5 << "  flag1: " << flag1 << "  flag2: " << flag2 << endl;if (!flag1 && !flag2 && (flag5 == 0) && (flag4 == 0) && (flag3 == 0)){//flag4 ++;// deal with //...:delete char until '\n'cout << "deal with // ..." << endl;*(p-1) = ' ';*(p-2) = ' ';while (*p != '\n'){cout << "dealing : " << *p << "   ";*p = ' ';p ++;}}}else if ( *p == '*' && !flag1 && !flag2 && (flag3 == 0))    // ....  /*.....{p ++;flag3 ++;cout << " falg3: " << flag3 << "  flag5: " << flag5 << "  flag1: " << flag1 << "  flag2: " << flag2 << endl;if (!flag1 && !flag2 && (flag4 == 0) && (flag3 == 1)){pos1 = p;// delete from pos1}}}break;case '*':{p ++;if (*p == '/' && !flag1 && !flag2)  // .... */...{flag5 ++;cout << " falg3: " << flag3 << "  flag5: " << flag5 << "  flag1: " << flag1 << "  flag2: " << flag2 << endl;if(!flag1 && !flag2 && (flag3 != 0) && (flag5 != 0)){flag3 = 0;flag5 --;pos2 = p - 2;cout << "deal with  \/* .. *\/" << endl;// deal wtih /*... */... : delete from pos1 to pos2char *pos = pos1;*(pos - 1) = ' ';*(pos - 2) = ' ';*(pos2 + 1) = ' ';*(pos2 + 2) = ' ';do {cout << "dealing: " <<  *pos << endl;*pos = ' ';pos ++;} while(pos != pos2 + 1);}}} break;default:p ++;break;}}
}

将C/C++代码中的注释删除相关推荐

  1. 抓取百度页面html,百度会抓取页面代码中的注释内容吗

    百度会抓取页面代码中的注释内容吗 内容导读:百度会抓取页面代码中的注释内容吗?答案是百度会抓取,但是在提取正文的时候会直接忽略掉,也就是说页面代码的注释内容不会影响到页面质量,所以大家尽管放心. 问题 ...

  2. Java代码中的注释详解

    2019独角兽企业重金招聘Python工程师标准>>> java注释详解 声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责 ...

  3. java注释里加_如何在代码中添加注释

    什么是代码注释,如何在代码中添加注释,相信每一位了解编程的人并不陌生.注释里往往有很多有趣的脑洞和「真心话」.今天我们一起去看看那些6到飞起,被玩坏了的幽默注释吧. 信息量太大的注释系列-- 1.你造 ...

  4. [译] 代码中添加注释之好坏丑

    原文地址:Putting comments in code: the good, the bad, and the ugly. 原文作者:Bill Sourour 译文出自:掘金翻译计划 译者: ba ...

  5. 深入理解C代码中的注释

    深入理解C代码中的注释 C 语言的注释可以出现在C 语言代码的任何地方?错!我们就看看下面的例子: A) int/*...*/i; B) char* s="abcdefgh //hijklm ...

  6. python代码教程-(Python基础教程之三)Python代码中添加注释

    在Python(或任何其他编程语言)中,注释用于解释源代码.注释描述了代码,这有助于将来维护应用程序. python中的注释 # prints 4 print(2 + 2) print(2 + 3) ...

  7. 【我的Android进阶之旅】Android 源代码中的Java代码中//$NON-NLS-1$ 注释是什么意思?...

    1.背景 最近在负责公司基础业务和移动基础设施的开发工作,正在负责Lint代码静态检查工作.因此编写了自定义的Lint规则,在编写自定义的Lint规则前,当然是需要去把Google的关于Lint检测的 ...

  8. python基本代码教程-(Python基础教程之三)Python代码中添加注释

    在Python(或任何其他编程语言)中,注释用于解释源代码.注释描述了代码,这有助于将来维护应用程序. python中的注释 # prints 4 print(2 + 2) print(2 + 3) ...

  9. 如何在代码中进行注释?

    html中的注释代码:<!--注释内容--> <!DOCTYPE HTML> <html><head><meta charset="ut ...

最新文章

  1. 深入理解BP神经网络的细节
  2. Android 截屏并写入SD卡中
  3. Flask框架(SQLAlchemy(python3版本)中修改数据的方法和删除数据 的方法)
  4. Asp.Net Core 2.1+的视图缓存(响应缓存)
  5. C++ 常用拷贝和替换算法
  6. lucene详细说明文档
  7. 引入antd组件样式_个人作品:一个技术栈koa2+ mysql+react + antd的个人博客
  8. 压测学习总结(5)——如何使用Jmeter 进行简单的并发操作
  9. Struts2报错异常Method setUser failed for object com.mikey.action.ConverterAction@dd34285
  10. UE4官方插件下载地址,完全免费
  11. 等保2.0 三级检查明细
  12. slk文件转换器安卓版_【更新】手机QQ、微信语音读取转换工具【sik\amr格式转mp3】...
  13. 如何将桌面上的qlv格式转换成mp4视频
  14. mysql 给库赋权,Mysql数据库安装、赋权
  15. 【2020】【论文笔记】太赫兹新型探测——太赫兹特性介绍、各种太赫兹探测器
  16. Win7下虚拟机安装Mac OS X
  17. Hadoop-3.3.0安装 Centos 8.2安装Hadoop-3.3.0 Hadoop-3.3.0安装指南
  18. Linux input子系统上报键值失败问题
  19. 【ACM】kuangbin基础数论专题
  20. foldermove中文版下载 | FolderMove(电脑文件夹移动软件)单文件汉化版V3.0.0.0 | 最新版foldermove下载

热门文章

  1. 中国科学院数学与系统科学研究院关于2019年招收硕士研究生复试规程
  2. Linux下 fio磁盘压测笔记
  3. 《Linux shell变量总结回顾》RHEL6(转)
  4. 用HTML5实现人脸识别
  5. domino代理通过Request_Content域接收extjs以post方式提交的数据
  6. AJAX验证jsp页面验证码
  7. python数据结构不常用的方法(哈哈,其实是常用的)
  8. GitHub 的简单使用
  9. thinkphp自动验证分析
  10. HDU 1242 Rescue