یک برنامه به زبان C++ بنویس که دو آرایه کاراکتری (char[]) را با استفاده از std::memcmp از هدر مقایسه کند و نتیجهٔ کلی (برابر یا غیرِ برابر) و همچنین اندیس اولین محل اختلاف را نمایش دهد.

7.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:34

0.0

برای حل، هدر را شامل کرده و از std::strlen برای گرفتن طول رشته‌های نول-ترمینیتد یا اندازهٔ بایت مناسب برای بافرهای دودویی استفاده کنید. ابتدا با std::memcmp دو بلوک بایت تا طول مینیموم مقایسه می‌شود تا معلوم شود آیا تا آن نقطه برابرند؛ اگر std::memcmp غیرصفر بود، برای یافتن اندیس اولین اختلاف یک حلقه ساده روی کاراکترها اجرا کنید؛ در غیر این صورت اگر طول‌ها متفاوت باشند، علامت‌دهی کنید که یکی پسوند دارد. نکته‌ها: std::memcmp مقایسه بایت‌به‌بایت انجام می‌دهد و برای داده‌های دودویی/عددهای باینری نیز مناسب است، اما برای یافتن موقعیت اختلاف باید از مقایسه ترتیبی استفاده کنید؛ از نوع size_t برای طول‌ها و دقت در ارسال تعداد بایت‌ها به memcmp استفاده کنید.

توسط پژوهشگر در 201 روز قبل ساعت 03:34
دسته بندی ها: C Plus Plus C Plus Plus for beginner
nima در 201 روز قبل ساعت 06:00

memcmp به بایت‌ها تا طولی که مشخص می‌کنید مقایسه می‌کند و هیچ اطلاعی از وجود null terminator ندارد. برای رشته‌های نول-ترمینیتد باید طول مناسب را با strlen بگیرید یا اندازه بافرها را صریحاً تعیین کنید. اگر نتیجه memcmp غیرصفر بود، یافتن اندیس اولین اختلاف را با یک حلقه ساده روی کاراکترها انجام دهید؛ memcmp فقط وجود تفاوت را نشان می‌دهد. همچنین اگر دو بافر طول‌های متفاوت دارند و نمی‌خواهید برای هر یک جداگانه مقایسه کنید، باید تصمیم بگیرید که آیا تفاوت در طول هم باید محسوب شود یا نه. از اندازه‌گیری با size_t استفاده کنید تا سازگار با بافرهای بزرگ و کار با داده‌های دودویی باشید.

گزارش

1 پاسخ

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

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