/*コメント*/を取り除く
Posted feedbacks - HSP
単純に実装するとこれが最もシンプルでしょうか。 入力文字列が複数行にわたることも考えられるので、getstrは利用していません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #module
#defcfunc remove_comment str p1
source = p1
result = ""
index = 0
repeat
ins = instr( source, index, "/*" )
if ( ins < 0 ) {
result += strmid( source, index, strlen( source ) - index)
break
}
result += strmid( source, index, ins )
index += ins + strlen( "/*" )
ins = instr( source, index, "*/" )
if ( ins < 0 ) {
break
}
index += ins + strlen( "*/" )
loop
return result
#global
mes remove_comment( "AAA" )
mes remove_comment( "AAA/*BBB*/" )
mes remove_comment( "AAA/*BBB" )
mes remove_comment( "AAA/*BBB*/CCC" )
mes remove_comment( "AAA/*BBB/*CCC*/DDD*/EEE" )
mes remove_comment( "AAA/a//*BB*B**/CCC" )
|


にしお
#3373()
Rating0/0=0.00
なお、「/*」と入力末尾で挟まれた部分も取り除いてください。 つまり、入力が「AAA/*BBB」なら出力は「AAA」です。 また、コメントは入れ子になりません。入力が「AAA/*BBB/*CCC*/DDD*/EEE」のとき、ひとつめの「*/」でコメントが終わるので出力は「AAADDD*/EEE」になります。 「//」や「**」が混ざる場合の挙動は失敗しやすいので要注意です。
Pythonでの実行例は下のようになります:
>>> remove_comment('AAA') 'AAA' >>> remove_comment('AAA/*BBB*/') 'AAA' >>> remove_comment('AAA/*BBB') 'AAA' >>> remove_comment('AAA/*BBB*/CCC') 'AAACCC' >>> remove_comment('AAA/*BBB/*CCC*/DDD*/EEE') 'AAADDD*/EEE' >>> remove_comment('AAA/a//*BB*B**/CCC') 'AAA/a/CCC'このお題は匿名での投稿を参考にして作成しました。 ありがとうございます。
[ reply ]