- محدودیت زمان: ۰.۵ ثانیه
- محدودیت حافظه: ۶۴ مگابایت
در این سوال از شما خواسته شده است تا یک ماشین متنی کوچک با مجموعهای از قابلیت های ساده را پیادهسازی نمایید. روال کار بدین صورت است که در آغاز کار برنامه یک رشته متنی اولیه(به طول حداکثر 1000 کاراکتر) را از ورودی دریافت میکند. در ادامه تا زمانی که دستور خروج را دریافت کند در هر نوبت کاربر درخواست یک عملیات بر روی رشته متنی میدهد. عملیات ها به شرح زیر تعریف شدهاند:
دستور ورودی | توضیحات و خروجی |
---|---|
SHIFT-R N | تمام کاراکترهای عبارت را به صورت چرخشی N واحد به سمت راست منتقل میکند. |
SHIFT-L N | تمام کاراکترهای عبارت را به صورت چرخشی N واحد به سمت راست منتقل میکند. |
EXTEND N | به انتهای رشته موجود N کاراکتر جدید اضافه میکند و به عنوان مقدار پیشفرض کاراکترها، ستاره(*) قرار میدهد. |
SHRINK N | از انتهای رشته، N کاراکتر حذف میکند. درصورتی که طول رشته کمتر از N بود،رشته حاصل یک رشته خالی خواهد بود. |
REVERSE | رشته را معکوس میکند. |
PUT I C | حرف مکان Iام رشته را با حرف C جایگزین میکند.توجه داشته باشید که شماره مکانها از یک آغاز میشود و I همواره کوچکتر مساوی طول رشته خواهد بود. |
رشته فعلی را چاپ میکند و به خط بعد میرود. | |
EXIT | اتمام برنامه |
برنامه شما تنها به ازای عملیات چاپ خروجی خواهد داشت و به ازای سایر دستورات صرفاً عملیات موردنظر را برروی رشته متنی انجام میدهد. در پیادهسازی این سوال، شما باید به ازای تمامی دستورات(به جز خروج) یک تابع در نظر بگیرید و انجام عملیات توسط فراخوانی آن تابع انجام بگیرد. به عنوان نمونه امضای توابع باید به این صورت باشد:
void Extend( char *string, int _extendedLength);
مثال
ورودی نمونه ۱
initial string
PRINT
EXTEND 2
SHIFT-R 3
PRINT
PUT 3 o
REVERSE
SHRINK 2
PRINT
EXIT
خروجی نمونه ۱
initial string
g**initial strin
nirts laitinio
ورودی نمونه ۲
Test
PRINT
SHRINK 20
PRINT
EXTEND 2
PRINT
EXIT
خروجی نمونه ۲
Test
**
ارسال پاسخ برای این سؤال