یک برنامهٔ C++ بنویسید که یک عبارت ریاضی شامل ارقام، نقطه اعشاری، عملگرها (+ - * / ^) و پرانتزها را از ورودی می‌گیرد، تمام نویسه‌های فاصله‌ای را با استفاده از std::isspace حذف کرده و سپس عبارت پاک‌شده را به توکن‌های عددی و عملگرها تقسیم و چاپ کند.

0.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:22

0.0

برای حل مسئله از کتابخانهٔ استاندارد C++ استفاده کنید: رشته ورودی را با std::string بخوانید، سپس با پیمایش کاراکتر به کاراکتر و استفاده از std::isspace (از و با تبدیل کاراکتر به unsigned char) نویسه‌های فاصله‌ای را نادیده بگیرید. هنگام پیمایش، توکن‌های عددی (شامل ارقام و یک نقطهٔ اعشاری) را جمع کنید و هرگاه به یک عملگر یا پرانتز رسیدید، توکن عددی فعلی را ذخیره و عملگر/پرانتز را به عنوان توکن جداگانه اضافه کنید. در صورت نیاز می‌توانید از std::vector برای نگهداری توکن‌ها و از std::stod برای تبدیل رشتهٔ عددی به double استفاده کنید. این تمرین پایهٔ مناسبی برای مباحث پارس کردن در کامپایلرها/مفسرها و آماده‌سازی ورودی برای محاسبات عددی است؛ نکتهٔ ایمنی: همیشه ورودی را اعتبارسنجی کنید و هنگام استفاده از std::isspace کاراکتر را به unsigned char تبدیل کنید تا رفتار تعریف‌شده داشته باشد.

توسط پژوهشگر در 221 روز قبل ساعت 01:22
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 221 روز قبل ساعت 13:30

نکتهٔ کلیدی این است که هنگام استفاده از std::isspace کاراکتر را به unsigned char تبدیل کنید تا رفتار استاندارد و بدون undefined behavior تضمین شود. توکن‌های عددی باید تنها شامل ارقام و یک نقطهٔ اعشاری باشند و در صورت وجود چند نقطه یا وجود علایم منفی، منطق جداکردن یا پردازش اضافی لازم است. استفاده از std::stod برای تبدیل توکن‌های عددی به مقدار خام باید داخل بلوک try-catch باشد تا با ورودی‌های نامعتبر برخورد نکند. به‌همراه این، اعتبارسنجی ورودی و مدیریت خطاها، پارس کردن ورودی و چاپ توکن‌ها را امن‌تر و قابل‌اعتماد می‌کند.

گزارش

1 پاسخ

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

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