یک برنامهٔ C++ بنویسید که دو رشتهٔ ورودی از کاربر دریافت کند و با استفاده از std::memcmp بررسی کند آیا محتوای بایت‌به‌بایت آنها یکسان است یا خیر و نتیجهٔ برابر/نابرابر را چاپ کند.

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

0.0

برای حل این مسئله از تابع std::memcmp استفاده کنید: ابتدا طول هر دو رشته را (با strlen برای آرایهٔ کاراکتری یا size برای std::string) بررسی کنید و اگر طول‌ها متفاوت بود بلافاصله نابرابر اعلام کنید؛ در غیر این صورت از std::memcmp(ptr1, ptr2, length) استفاده کنید — اگر مقدار بازگشتی صفر باشد رشته‌ها دقیقاً یکسان‌اند. نکات: می‌توانید از std::string::c_str() برای گرفتن اشاره‌گر به دادهٔ کاراکتری استفاده کنید، دقت کنید که در مقایسهٔ حافظه دربارهٔ داده‌های عددی یا شناور فقط وقتی قابل‌اطمینان است که نمای بیتی یکسان باشد (مورد توجه در پردازش‌گرها/کامپایلرها و محاسبات عددی).

توسط پژوهشگر در 220 روز قبل ساعت 02:03
دسته بندی ها: C Plus Plus C Plus Plus for beginner
sara در 220 روز قبل ساعت 11:05

نکتهٔ کلیدی این است که با std::memcmp فقط زمانی نتیجهٔ برابر می‌شود که طول دو آرایه به‌طور دقیق برابر باشد. اگر از std::string استفاده می‌کنید، طول دو رشته را با s1.size() و s2.size() مقایسه کنید و تنها در صورت برابر بودن، حافظه را با std::memcmp مقایسه کنید. داده‌های کاراکتری را به صورت unsigned char* بدهید (مثلاً با reinterpret_cast<const unsigned char*>(s1.data())) و اندازه را برابر s1.size() قرار دهید. memcmp هیچ وابستگی به null termination ندارد و برای داده‌های دودویی یا رشته‌های با احتمال وجود کاراکتر‌های صفر باید طول دقیق داده‌ها گرفته شود.

گزارش

1 پاسخ

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

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