/*コメント*/を取り除く
Posted feedbacks - Haskell
正規表現使わない
1 2 3 4 5 6 7 8 | removeComment [] = []
removeComment ('/':'*':xs) = skip xs
where skip [] = []
skip ('*':'/':xs) = removeComment xs
skip (x:xs) = skip xs
removeComment (x:xs) = x : removeComment xs
main = getContents >>= (putStr . removeComment)
|
Haskell の練習
1 2 3 4 5 6 7 8 9 | removeComment :: String -> String
removeComment = outOfComment
where
outOfComment ('/':'*':cs) = inComment cs
outOfComment (c:cs) = c : outOfComment cs
outOfComment [] = []
inComment ('*':'/':cs) = outOfComment cs
inComment (c:cs) = inComment cs
inComment [] = []
|



にしお
#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 ]