トップページに戻る
次のC#のサンプルへ
前のC#のサンプルへ
11-5 「/*」と「*/」で挟まれた部分を取り除く
問題
与えられた文字列から「/*」と「*/」で挟まれた部分を取り除くコードを書いてください。
なお、「/*」と入力末尾で挟まれた部分も取り除いてください。
つまり、入力が「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'
ソース
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var inputValues = new string[] { "AAA",
"AAA/*BBB*/",
"AAA/*BBB",
"AAA/*BBB*/CCC",
"AAA/*BBB/*CCC*/DDD*/EEE",
"AAA/a//*BB*B**/CCC"};
foreach (var each in inputValues) {
Console.WriteLine("入力文字={0}", each);
Console.WriteLine("変換文字={0}", Regex.Replace(each, @"/\*.*?(\*/|$)", ""));
Console.WriteLine();
}
}
}
実行結果
入力文字=AAA
変換文字=AAA
入力文字=AAA/*BBB*/
変換文字=AAA
入力文字=AAA/*BBB
変換文字=AAA
入力文字=AAA/*BBB*/CCC
変換文字=AAACCC
入力文字=AAA/*BBB/*CCC*/DDD*/EEE
変換文字=AAADDD*/EEE
入力文字=AAA/a//*BB*B**/CCC
変換文字=AAA/a/CCC
解説