日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

去除cpp中注释的小程序

發(fā)布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 去除cpp中注释的小程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


//本程序針對 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 == '//') {??//取消識別第二個 / 為轉(zhuǎn)義
?????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 == '//') {??//取消識別第二個 / 為轉(zhuǎn)義
?????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 : 正常到達(dá)文件尾,return
????if 遇到回車: { 輸出回車,break; }
???}
??else if 是 * :
???判斷后面連續(xù)輸入的兩個字符為 *和/ 后,break
???????? else :
???輸出? / 和 ch
? ?else if 讀到 ' :
??fin >> ch1
??輸出 ' 和 ch1
??if ch1 是 ' : 識別了空字符,continue
??do:
???繼續(xù)輸入后續(xù)字符
??? //識別兩個連續(xù)字符為 /"? ,則輸出 /" ,往后跳過兩格
???識別兩個連續(xù)字符為 //? ,則輸出 // ,往后跳過兩格 //避免 / 被重用
???識別兩個連續(xù)字符為 /'? ,則輸出 /' ,往后跳過兩格 //避免 ' 被誤判為第一個 ' 的配對符
???不是以上情況,則判斷位置后移一格字符
??while 輸入字符 != '
???
??? ?else if 讀到 " :
??fin >> ch1
??輸出 " 和 ch1
??如果ch1 是雙引號:? contiune?? //識別為空串
??do:
???繼續(xù)輸入后續(xù)字符
???識別兩個連續(xù)字符為 /"? ,則輸出 /" ,往后跳過兩格
???識別兩個連續(xù)字符為 //? ,則輸出 // ,往后跳過兩格
???不是以上情況,則判斷位置后移一格字符
??while 輸入字符 != "
?else :? 按正常情況輸出 ch??
}

*/

/*//測試用例:

? //abc/
abc,/
不接著 /
?abc,接著/
printf("不可思議/n");///
強(qiáng)/
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

總結(jié)

以上是生活随笔為你收集整理的去除cpp中注释的小程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。