یک برنامه C++ بنویسید که یک رشته، یک اندیس شروع و طول را از ورودی بگیرد و با استفاده از std::memmove آن زیررشته را از رشته حذف کند و رشته حاصل را چاپ کند.
6.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:25 0.0
برای حل این مسئله از std::memmove (تعریفشده در ) استفاده کنید: رشته ورودی را به یک بافر قابل تغییر (مثلاً &str[0] یا str.data() در C++17+) تبدیل کنید، سپس با memmove بخش باقیمانده را روی مکان حذفشده جابجا کنید و طول رشته را متناسب کاهش دهید. حتماً بررسیهای سادهای برای محدوده اندیسها انجام دهید؛ std::memmove برای حرکت حافظه با همپوشانی ایمن است که اینجا لازم است. از و هم برای IO و نگهداری رشته استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای حذف زیررشته با memmove ابتدا اندیس شروع و طول حذف را با اندازهٔ رشته مقایسه کن تا محدودهٔ درستی به دست آوری. چون memmove با همپوشانی ایمن است، میتوانی با استفاده از &str[0] یا str.data() دادهها را داخل بافر قابل تغییر جابهجا کنی و بخش باقیمانده را به محل حذفشده بکشانی. پس از memmove رشته را با str.resize(new_len) کوتاه کن تا طول جدید حفظ شود و در خروجی چاپ شود. توجه کن که اگر قصد استفاده از c_str() یا چاپ مستقیم با std::cout را داری، std::string طولِ خود را نگه میدارد و نیازی به '\0' اضافی نیست، اما هنگام دستکاری حافظهٔ داخلی با memmove باید دادهها را بهطور معتبر منتقل و اندازه را درست بروزرسانی کنی.
گزارش