یک برنامه C++ بنویسید که یک رشته، یک اندیس شروع و طول را از ورودی بگیرد و با استفاده از std::memmove آن زیررشته را از رشته حذف کند و رشته حاصل را چاپ کند.

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

0.0

برای حل این مسئله از std::memmove (تعریف‌شده در ) استفاده کنید: رشته ورودی را به یک بافر قابل تغییر (مثلاً &str[0] یا str.data() در C++17+) تبدیل کنید، سپس با memmove بخش باقیمانده را روی مکان حذف‌شده جابجا کنید و طول رشته را متناسب کاهش دهید. حتماً بررسی‌های ساده‌ای برای محدوده اندیس‌ها انجام دهید؛ std::memmove برای حرکت حافظه با همپوشانی ایمن است که اینجا لازم است. از و هم برای IO و نگهداری رشته استفاده کنید.

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

برای حذف زیررشته با memmove ابتدا اندیس شروع و طول حذف را با اندازهٔ رشته مقایسه کن تا محدودهٔ درستی به دست آوری. چون memmove با همپوشانی ایمن است، می‌توانی با استفاده از &str[0] یا str.data() داده‌ها را داخل بافر قابل تغییر جابهجا کنی و بخش باقی‌مانده را به محل حذف‌شده بکشانی. پس از memmove رشته را با str.resize(new_len) کوتاه کن تا طول جدید حفظ شود و در خروجی چاپ شود. توجه کن که اگر قصد استفاده از c_str() یا چاپ مستقیم با std::cout را داری، std::string طولِ خود را نگه می‌دارد و نیازی به '\0' اضافی نیست، اما هنگام دستکاری حافظهٔ داخلی با memmove باید داده‌ها را به‌طور معتبر منتقل و اندازه را درست بروزرسانی کنی.

گزارش

1 پاسخ

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

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