یک برنامه C++ بنویسید که دو بلوک بایت (رشته‌های باینری) را از ورودی بگیرد و با استفاده از std::memcmp از هدر تا طول مشخص‌شده آن‌ها را مقایسه کند و خروجی دهد که اولین بلوک کوچکتر، برابر یا بزرگ‌تر از دوم است.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:12

0.0

برای حل این مسئله از تابع std::memcmp(const void* s1, const void* s2, std::size_t n) در هدر استفاده کنید؛ این تابع عددی منفی، صفر یا مثبت برمی‌گرداند که نشان‌دهنده نتیجهٔ مقایسهٔ بایت به بایت است. داده‌ها را می‌توان به شکل std::string یا آرایهٔ char/unsigned char خواند و سپس با std::memcmp با طول مشخص مقایسه کرد؛ مراقب باشید طول مقایسه از اندازه‌ی واقعی بلوک‌ها بیشتر نباشد و در صورت نیاز از unsigned char برای حذف ابهام در نشانه‌گذاری بایت‌ها استفاده کنید. این روش در رشته‌پردازی سطح پایین که در کامپایلرها یا محاسبات عددی برای مقایسهٔ نمایش‌های باینری کاربرد دارد مفید است؛ برای ورودی ساده می‌توانید طول، سپس دو بلوک داده را خوانده و نتیجه را براساس مقدار بازگشتی std::memcmp چاپ کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:12
دسته بندی ها: C Plus Plus C Plus Plus for beginner
arman در 220 روز قبل ساعت 10:36

برای استفاده امن از std::memcmp، اندازه n را به درستی تعیین کنید و از unsigned char برای داده‌های باینری استفاده کنید تا نشانه‌گذاری بایت‌ها مشخص باشد. memcmp فقط با طول مشخصی مقایسه می‌کند، پس مطمئن شوید n ≤ اندازه بلوک‌ها و از خواندن داده خارج از محدوده جلوگیری کنید. خروجی تابع منفی، صفر یا مثبت است و مقدار صفر نشان‌دهندهٔ برابر بودن دو بلوک است. اگر داده‌ها در std::string یا آرایه‌های char/unsigned char هستند، با data() یا reinterpret_cast به const unsigned char* داده‌ها را به memcmp بدهید. نهایتاً ورودی‌ها و طول مقایسه را کنترل کنید تا از باگ‌های ورودی جلوگیری شود.

گزارش

1 پاسخ

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

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