با استفاده از StringBuilder.Remove در سی‌شارپ تابعی بنویسید که از یک رشته‌ی حاوی کد منبع تمام کامنت‌های تک‌خطی (// تا پایان خط) و چندخطی (/* ... */) را حذف کند و رشته‌ی پاک‌شده را برگرداند.

10.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 19:39

0.0

برای کار از System.Text.StringBuilder استفاده کنید تا تغییرات روی متن سریع باشد: متن را در یک StringBuilder قرار دهید، سپس در حلقه‌ای به دنبال الگوهای "//" و "/*" با کمک IndexOf روی رشته (یا با تبدیل موقت به رشته با ToString()) بگردید، موقعیت انتهای کامنت را تعیین کنید (تا اولین '\n' برای تک‌خطی یا تا "*/" برای چندخطی) و با StringBuilder.Remove بازهٔ مربوطه را حذف کنید؛ این کار را تا وقتی که دیگر کامنتی یافت نشد تکرار کنید. نکات: بعد از هر حذف مجدداً اندیس‌ها را بازخوانی کنید، برای حالت‌هایی که پایان "*/" یافت نمی‌شود تا انتهای متن حذف کنید، و توجه کنید که حذف کامنت‌ها در پردازش‌های کامپایلر/مفسر یا پاک‌سازی ورودی در وب‌ یا بازی‌سازی کاربرد دارد.

توسط پژوهشگر در 199 روز قبل ساعت 19:39
دسته بندی ها: C# C# for beginner
sara در 199 روز قبل ساعت 19:40

روش پیشنهادی با StringBuilder.Remove سریع و مناسب است، اما به خاطر داشته باشید که باید الگوهای // و /* را تنها زمانی حذف کنید که داخل رشته‌ها یا کاراکترها نباشند چون رشته‌های متنی ممکن است الگوهای شبیه کامنت داشته باشند. بعد از هر حذف حتماً اندیس‌ها را بازخوانی کنید و برای کامنت‌های تک‌خطی ترجیحاً خودِ '\n' را نگه دارید یا جایگزین کنید تا شماره خطوط حفظ شود، و اگر پایان "*/" یافت نشد کل تا انتهای متن را حذف کنید. همچنین برای سازگاری با CRLF و بهبود پایداری می‌توانید پیاده‌سازی را به صورت ماشین حالت‌دار ساده درآورید تا همگیٔ حالت‌های مرزی به درستی مدیریت شوند.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری