یک برنامه به زبان C++ بنویسید که یک رشته ورودی را خوانده و با استفاده از std::isalnum از تمام توکنهای متوالیِ حرفی-عددی را استخراج کرده و هر توکن را در یک خط جدا چاپ کند.
2.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:17 0.0
برای حل این مسئله رشته را کاراکتر به کاراکتر پیمایش کنید، وقتی std::isalnum(static_cast(ch)) درست بود کاراکتر را به توکن جاری اضافه کنید و هنگام مواجهه با کاراکتر غیرِ حرفی-عددی توکن جاری را چاپ و آن را خالی کنید؛ در پایان توکن باقیمانده را نیز چاپ کنید. از برای استفاده از std::isalnum و از std::string برای ساخت توکنها استفاده کنید — این روش پایهایِ استخراج توکنها در تحلیلگرهای لغوی (lexers) در کامپایلرها و نیز جداسازی رشتههای عددی/شناور در محاسبات علمی است؛ همیشه کاراکتر را قبل از ارسال به isalnum به unsigned char تبدیل کنید تا از رفتار نامشخص جلوگیری شود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکتهٔ کلیدی این است که هنگام فراخوانی std::isalnum مقدار را به unsigned char تبدیل کنید تا رفتار نامشخص کاهش یابد. در صورت کار با کاراکترهای غیر ASCII، locale مناسب یا استفاده از iswalnum را در نظر بگیرید. توکنهای استخراجشده را در std::string جمعآوری کنید و وقتی کاراکتر غیرِ حرف-عددی دیدید، توکن را چاپ و خالی کنید؛ در پایان توکن باقیمانده را نیز چاپ کنید. این رویکرد پایهای برای استخراج توکنها در تحلیلگرها است.
گزارش