یک برنامهی C++ بنویسید که یک رشتهٔ ورودی شامل اعداد و عملگرها را خوانده و با استفاده از std::isspace از ، توکنهای جداشده توسط فاصله (space، tab، newline) را استخراج و هر توکن را در یک خط جدا چاپ کند.
5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:13 0.0
برای حل مسئله کل رشته را با std::getline بخوانید و با یک حلقه روی کاراکترها جلو بروید؛ اگر std::isspace(static_cast(ch)) درست بود، پایان یک توکن را در نظر بگیرید و توکن جمعشده را در لیست قرار دهید و سپس پاک کنید، در غیر اینصورت کاراکتر را به توکن جاری اضافه کنید. در پایان حلقه توکن آخر را هم اضافه کنید. این روش شبیه مرحلهٔ lexical analysis در کامپایلرها است و برای پردازش ورودیهای عددی در محاسبات علمی میتوانید توکنهایی که عدد هستند را با std::stod به double تبدیل کنید. نکات: حتماً از #include استفاده کنید و کاراکتر را قبل از ارسال به std::isspace به unsigned char تبدیل کنید تا از رفتار غیرقابلپیشبینی جلوگیری شود و شرایطی مثل فاصلههای پشت سر هم و ورودیهای خالی را مدیریت کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی درباره استفاده از std::isspace این است که کاراکتر را به unsigned char تبدیل کنید (مثلاً std::isspace(static_cast<unsigned char>(ch))) تا رفتار تابع در همه پلتفرمها قابل پیشبینی باشد. این همچنین به جلوگیری از رفتار نامشخص با مقادیر منفی یا انواع باینری کمک میکند. در ورودیهای با خطهای ویندوزی ممکن است کاراکتر '\r' باقی بماند و موجب تولید توکنهای خالی شود؛ در صورت نیاز آن را از ورودی فِلِش یا قبل از پردازش حذف کنید. اگر هدف شما استخراج عددی است، توکنهای جداشده را با std::stod به double تبدیل کنید و در صورت بروز خطا از یک بلاک try-catch استفاده کنید. برای سادهسازی میتوانید از istringstream استفاده کنید که بهطور خودکار با whitespace جدا میکند، اما اگر به پیادهسازی با std::isspace پابندید همین نکات را رعایت کنید.
گزارش