یک برنامهٔ 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++) اجرا کنید.

توسط پژوهشگر در 198 روز قبل ساعت 04:38
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 198 روز قبل ساعت 04:39

قبل از مقایسهٔ عددی حتماً فضاهای پیش و پس را حذف کنید و با std::strtod (یا std::stod) همراه با endptr و بررسی اینکه همهٔ کاراکترها مصرف شده‌اند و errno برای ERANGE را چک کنید تا تبدیل ناقص یا overflow شناسایی شود. به یاد داشته باشید std::strcmp مقایسهٔ بایت‌به‌بایت و حساس به حروف بزرگ/کوچک است و ترتیب لغت‌نامه‌ای وابسته به locale یا قواعد بین‌المللی را درنظر نمی‌گیرد؛ در صورت نیاز از امکانات locale-aware یا مقایسهٔ حرف‌به‌حرف با توابع مناسب استفاده کنید. همچنین مقادیر ویژهٔ اعشاری مثل inf و NaN را مدیریت کنید و در C++17/20 می‌توانید برای تبدیل سریع و بدون استثنا از std::from_chars بهره ببرید.

گزارش

1 پاسخ

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

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