یک برنامهٔ C++ بنویسید که دو رشتهٔ ورودی را به صورت C-style دریافت کند، با استفاده از std::strcmp از آنها را به صورت لغتنامهای مقایسه کند و نتیجهٔ "کمتر"، "مساوی" یا "بزرگتر" را چاپ کند؛ در صورتی که هر دو رشته نمایانگر عدد اعشاری معتبر باشند، علاوه بر مقایسهٔ لغتنامهای، مقایسهٔ عددی را نیز انجام دهد و نتیجهٔ عددی را هم نمایش دهد.
16.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 04:38 0.0
برای حل این مسئله از هدر و تابع std::strcmp برای مقایسهٔ لغتنامهای استفاده کنید؛ میتوانید ورودی را با std::getline در std::string بخوانید و سپس از c_str() برای گرفتن رشتهٔ C-style استفاده کنید. نتیجهٔ strcmp را بررسی کنید: صفر مساوی، منفی اولین کمتر و مثبت اولین بزرگتر را نشان میدهد. برای مقایسهٔ عددی، ابتدا بررسی کنید هر دو رشته پس از حذف فاصلهها نمایانگر عدد (مثلاً با std::strtod یا std::stod و بررسی اینکه تبدیل کل رشته را مصرف کرده) هستند، سپس آنها را به عدد تبدیل و با عملگرهای عددی مقایسه کنید. نکات: پیش و پسزمینهٔ فضاها را حذف کنید، خطاهای تبدیل را مدیریت کنید و برنامه را با یک کامپایلر C++ استاندارد (مثلاً g++ یا clang++) اجرا کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
قبل از مقایسهٔ عددی حتماً فضاهای پیش و پس را حذف کنید و با std::strtod (یا std::stod) همراه با endptr و بررسی اینکه همهٔ کاراکترها مصرف شدهاند و errno برای ERANGE را چک کنید تا تبدیل ناقص یا overflow شناسایی شود. به یاد داشته باشید std::strcmp مقایسهٔ بایتبهبایت و حساس به حروف بزرگ/کوچک است و ترتیب لغتنامهای وابسته به locale یا قواعد بینالمللی را درنظر نمیگیرد؛ در صورت نیاز از امکانات locale-aware یا مقایسهٔ حرفبهحرف با توابع مناسب استفاده کنید. همچنین مقادیر ویژهٔ اعشاری مثل inf و NaN را مدیریت کنید و در C++17/20 میتوانید برای تبدیل سریع و بدون استثنا از std::from_chars بهره ببرید.
گزارش