去除cpp中注释的小程序
来源:互联网 发布:java参数可以传null吗 编辑:程序博客网 时间:2024/05/17 09:34
//本程序针对 vc++ 6.0 编译器语法,使用者要保证测试用例能在 vc++ 6.0 下编译通过
#include"stdio.h"
#define checkInputError(ch) if(scanf("%c",&ch) == EOF) { printf("Error!/n");return; }
#define ERROR printf("Error!/n");return;
static int DQM = false;// 双引号 double quotation marks
static __int64 ALL = 0;
void main() {
char ch,ch1;
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
while(scanf("%c",&ch) != EOF) {
//如果读到正斜杆
if(ch == '/') {
checkInputError(ch);
if(ch == '/') {
bool flag = false;
while(true) {
if(scanf("%c",&ch1) == EOF) { printf("/n//正常到文件尾"); return; }
if(ch1 == '/n' && ch != '//') {
printf("/n"); break;
}
ch = ch1;
}
}
else if(ch == '*') {
checkInputError(ch1);
while(true) {
checkInputError(ch);
if(ch1 == '*' && ch == '/') break;
ch1 = ch;
}
}
else {
printf("/%c",ch); ALL += 2;
}
}
//如果读到单引号, 这里还没有处理空字符 ''
else if(ch == '/'') {
checkInputError(ch1);
printf("'%c",ch1); ALL+= 2;
if(ch1 == '/'') { printf("/*识别出空字符*/"); continue; }
do {
checkInputError(ch); printf("%c",ch); ALL++;
if(ch1 == '//' && ch == '//') { //取消识别第二个 / 为转义
checkInputError(ch); printf("%c",ch); ALL++;
}
//else if(ch1 == '//' && ch == '/"') { /*识别 /" */ /
checkInputError(ch); printf("%c",ch); ALL++; /
}
else if(ch1 == '//' && ch == '/'') { //识别 /'
checkInputError(ch); printf("%c",ch); ALL++;
}
ch1 = ch;
} while(ch != '/'');
}
//如果读到双引号
else if(ch == '/"') {
checkInputError(ch1);
printf("/"%c",ch1); ALL+= 2;
if(ch1 == '/"') { printf("/*识别出了空串*/"); continue; }//识别出了空串
do {
checkInputError(ch); printf("%c",ch); ALL++;
if(ch1 == '//' && ch == '/"') { //识别 /"
checkInputError(ch); printf("%c",ch); ALL++;
}
else
if(ch1 == '//' && ch == '//') { //取消识别第二个 / 为转义
checkInputError(ch); printf("%c",ch); ALL++;
}
ch1 = ch;
} while(ch != '/"');
}
//正常输出字符
else {
printf("%c",ch); ALL++;
}
}
printf("/n //ALL = %I64d/n",ALL);
}
/*
//按 / / ' * 四个符号的相互嵌套作用分析,分成四种情况,/
采用一次扫描配对处理。
//每次读字符都要判断是否到 EOF
while(fin >> ch) {
if 读到 / :
fin >> ch.
if 是 / :
while(true) {
if fin >> ch == EOF : 正常到达文件尾,return
if 遇到回车: { 输出回车,break; }
}
else if 是 * :
判断后面连续输入的两个字符为 *和/ 后,break
else :
输出 / 和 ch
else if 读到 ' :
fin >> ch1
输出 ' 和 ch1
if ch1 是 ' : 识别了空字符,continue
do:
继续输入后续字符
//识别两个连续字符为 /" ,则输出 /" ,往后跳过两格
识别两个连续字符为 // ,则输出 // ,往后跳过两格 //避免 / 被重用
识别两个连续字符为 /' ,则输出 /' ,往后跳过两格 //避免 ' 被误判为第一个 ' 的配对符
不是以上情况,则判断位置后移一格字符
while 输入字符 != '
else if 读到 " :
fin >> ch1
输出 " 和 ch1
如果ch1 是双引号: contiune //识别为空串
do:
继续输入后续字符
识别两个连续字符为 /" ,则输出 /" ,往后跳过两格
识别两个连续字符为 // ,则输出 // ,往后跳过两格
不是以上情况,则判断位置后移一格字符
while 输入字符 != "
else : 按正常情况输出 ch
}
*/
/*//测试用例:
//abc/
abc,/
不接着 /
abc,接着/
printf("不可思议/n");///
强/
printf("不可思议/n");/
printf("不可思议/n");
//上面这整个用例可能被病毒利用
//printf(""//n");
printf("%c/n",'"');
//printf("%c/n",''');
//printf("%c/n",'');
printf("'/n");
printf("''/n");
printf("///n");
printf("%c/n",'/');
printf("%c/n",'/'');
printf("/' /n");
printf("/"");
printf("");
printf("//");
printf("///b///"");
printf("%c",'1/3');
printf("%c",'1/1/'');
printf("%c",'1///'');
printf("%c",'1///'/'');
printf("%c",'/"/1');
printf("%c",'/123');
printf("%c",'/x43');
printf("%c",'/好');
printf("%c",'/"/3/"');
printf("%c",'/'/3/'');
printf("/中");
// /*printf("*//*");
*/
// /*/
//2009-03-25
- 去除cpp中注释的小程序
- 来个去除c程序中的注释的小程序
- 一个去除视频前景,保留背景的 opencv 小程序 (附注释)
- caffe 中classification.cpp的源码注释
- 去掉注释的小程序
- C++去除程序注释实现
- 去除C程序中的注释
- 去除程序中的中文注释
- 去除C程序中的注释
- 在C语言中利用有限状态自动机模拟编译器去除代码中/**/类注释的程序实现
- 在CPP文件中自动添加函数注释的ADDIN
- 在CPP文件中自动添加函数注释的ADDIN
- <Example_MarkerBasedAR>中Marker.cpp的源码与详细中文注释
- 去除vs2010中注释的波浪线-----原因在vx
- 去除MyEclipse 中新建servlet多余的注释问题
- 注释转换-小程序
- camshiftdemo.cpp的详细注释
- 去除C++注释的脚本
- 完成Ext Ajax 提交表单
- jconsole远程监控resin笔记
- JAVA实现DES的一个类
- 输入阳历取对应阴历的存储过程
- CSS 框模型
- 去除cpp中注释的小程序
- 配置Spring数据源c3p0与dbcp
- 利用netfilter的hook来实现数据包的过滤(For Kernel2.4)
- MyEclipse 6.5的汉化
- 复制数据库到另一台服务器的方法
- 批量插入数据
- 将dmp文件导入oracle数据库
- 试用VSPM软件
- java防止反编译的方法