先打个广告: http://www.cnblogs.com/aiasted 我的博客
请看题目:
大家都知道 C# 使用 // 或 /* */ 作为注释
提问,怎样才能删除一个cs文件中所有的,各种形式的注释
特别提示: 当二种注释一起出现时的处理,二种注释同时出现,那一种有效自己开个VS试吧
结果参照:
要求有完整的代码,界面就不需要了,不过至少要有打开和保存文件吧
使用文件类来操作,输入原文件,输出新文件
如果您从来没写过此类算法,那么测试将有效,你可以参照以下标准评分:
10分钟内写完 你一定是个绝顶高手,而且打字速度很快
30分钟内写完 算是个高手吧,至少算法基础比较熟悉
60分钟内写完 一般吧你
XXX小时能够写完 你可以算是个程序员吧
不会写??? 你别搞程序了,智商不够高
代码就不用贴出来了,影响其它人,自己凭着良心评分吧
最后,此方法大约共 16 行代码可搞定
我用VC,边看动画边写,用了1个小时,我是个白痴..555...
---------------------------------------------------------------
新写了个,20分钟,刚测试了一下,和你的结果一样;和我原来写的词法分析的算法一样;你可以再试试
char[] code = textBox1.Text.ToCharArray();
string newcode = "";
char c = '\0';
for (int i=0;i
1<code.length;i++){ &&tmp.length="" ')break;="" '){="" )break;="" ){="" +="c.ToString();" ;="" c="code[i];" i++;="" if(c="/" newcode="" string="" tmp="" while(i<code.length-1){="" }="" }else="" 多行注解="" 注解="">=4){
2if(tmp.Substring(tmp.Length-1,1)=="*")
3break;
4}
5tmp += c.ToString();
6}
7}else
8if(c=='/'){ //单行注解
9while(i<code.length-1){ #region="" '):="" )break;="" +="c.ToString();" -="" ;="" \---------------------------------------------------------------="" button1_click(object="" c="code[i];" c0="str0.ToCharArray();" c1="new" case('="" case(removecscomments.plaintext):="" char[]="" char[n],="" char[n];="" current="" e)="" i="0;" i++;="" i,="" if="new" if(c="\n" int="" int[]="" int[n];="" j,="" loop="" n="str0.Length;" newcode="" plaintext="" private="" s="RemoveCsComments.PlainText;" s,="" sender,="" status="" str0="TextBox1.Text;" string="" switch="" switch(c0[i+1])="" switch(c0[i])="" switch(s)="" system.eventargs="" textbox2.text="newcode;" void="" while(i<n)="" {="" }="" }else="" }else{="" 恢复行注解的回车="" 楼主的程序我测过了,全部32个testcase错了4个=""> CommentDoubleSlash
10iF[i] = RemoveCsComments.CommentDoubleSlash;
11i++;
12iF[i] = RemoveCsComments.CommentDoubleSlash;
13i++;
14s = RemoveCsComments.CommentDoubleSlash;
15break;
16#endregion PlainText -> CommentDoubleSlash
17}
18case('*'):
19{
20#region PlainText -> CommentSlashStar
21iF[i] = RemoveCsComments.CommentSlashStar;
22i++;
23iF[i] = RemoveCsComments.CommentSlashStar;
24i++;
25s = RemoveCsComments.CommentSlashStar;
26break;
27#endregion PlainText -> CommentSlashStar
28}
29default:
30{
31#region PlainText / PlainText
32iF[i] = RemoveCsComments.PlainText;
33i++;
34s = RemoveCsComments.PlainText;
35break;
36#endregion PlainText / PlainText
37}
38}
39break;
40#endregion PlainText /
41case('@'):
42#region PlainText @
43switch(c0[i+1])
44{
45case('"'):
46#region PlainText -> StringCS
47iF[i] = RemoveCsComments.StringCS;
48i++;
49iF[i] = RemoveCsComments.StringCS;
50i++;
51s = RemoveCsComments.StringCS;
52break;
53#endregion PlainText -> StringCS
54default:
55#region PlainText @ PlainText
56iF[i] = RemoveCsComments.PlainText;
57i++;
58s = RemoveCsComments.PlainText;
59break;
60#endregion PlainText @ PlainText
61}
62break;
63#endregion PlainText @
64case('"'):
65#region PlainText -> StringC
66iF[i] = RemoveCsComments.StringC;
67i++;
68s = RemoveCsComments.StringC;
69break;
70#endregion PlainText -> StringC
71default:
72#region PlainText
73iF[i] = RemoveCsComments.PlainText;
74i++;
75s = RemoveCsComments.PlainText;
76break;
77#endregion
78}
79
80break;
81#endregion PlainText
82case(RemoveCsComments.CommentSlashStar):
83#region CommentSlashStar
84switch(c0[i])
85{
86case('*'):
87#region CommentSlashStar *
88switch(c0[i+1])
89{
90case('/'):
91{
92#region CommentSlashStar -> PlainText
93iF[i] = RemoveCsComments.CommentSlashStar;
94i++;
95iF[i] = RemoveCsComments.CommentSlashStar;
96i++;
97s = RemoveCsComments.PlainText;
98break;
99#endregion CommentSlashStar -> PlainText
100}
101default:
102{
103#region CommentSlashStar * CommentSlashStar
104iF[i] = RemoveCsComments.CommentSlashStar;
105i++;
106s = RemoveCsComments.CommentSlashStar;
107break;
108#endregion CommentSlashStar * CommentSlashStar
109}
110}
111break;
112#endregion PlainText /
113default:
114#region CommentSlashStar
115iF[i] = RemoveCsComments.CommentSlashStar;
116i++;
117s = RemoveCsComments.CommentSlashStar;
118break;
119#endregion
120}
121
122break;
123#endregion CommentSlashStar
124case(RemoveCsComments.CommentDoubleSlash):
125#region CommentDoubleSlash
126switch(c0[i])
127{
128case((char)10):
129#region CommentDoubleSlash -> PlainText
130if(c0[i-1]==(char)13)
131iF[i-1] = RemoveCsComments.PlainText;
132iF[i] = RemoveCsComments.PlainText;
133i++;
134s = RemoveCsComments.PlainText;
135break;
136#endregion
137default:
138#region CommentDoubleSlash
139iF[i] = RemoveCsComments.CommentDoubleSlash;
140i++;
141s = RemoveCsComments.CommentDoubleSlash;
142break;
143#endregion
144}
145
146break;
147#endregion CommentDoubleSlash
148case(RemoveCsComments.StringC):
149#region StringC
150switch(c0[i])
151{
152case((char)92):
153#region StringC ->-> StringC
154iF[i] = Rem</code.length-1){></code.length;i++){>