پاسخ سوال ماشین متنی کوئرا
در این نوشته تمرین “ماشین متنی” که در وبسایت کوئرا موجود است را برای شما کاربران عزیز حل کردهایم.
پاسخ سوال ماشین متنی کوئرا
در این سوال از شما خواسته شده است تا یک ماشین متنی کوچک با مجموعهای از قابلیتهای ساده را پیادهسازی نمایید. روال کار بدین صورت است که در آغاز کار برنامه یک رشته متنی اولیه(به طول حداکثر 1000 کاراکتر) را از ورودی دریافت میکند. در ادامه تا زمانی که دستور خروج را دریافت کند در هر نوبت کاربر درخواست یک عملیات بر روی رشته متنی میدهد. عملیاتها به شرح زیر تعریف شدهاند:
برنامه شما تنها به ازای عملیات چاپ خروجی خواهد داشت و به ازای سایر دستورات صرفاً عملیات موردنظر را برروی رشته متنی انجام میدهد. در پیادهسازی این سوال، شما باید به ازای تمامی دستورات(به جز خروج) یک تابع در نظر بگیرید و انجام عملیات توسط فراخوانی آن تابع انجام بگیرد. به عنوان نمونه امضای توابع باید به این صورت است:
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 **
حل سوال ماشین متنی
using namespace std; void ShiftLeft(string &str, int cnt) { int n = str.length(); if(n == 0) return; string newstr = ""; cnt %= n; for(int i=0; i<n; i++) newstr += str[(i+cnt+n)%n]; str = newstr; } void ShiftRight(string &str, int cnt) { int n = str.length(); if(n == 0) return; string newstr = ""; cnt %= n; for(int i=0; i<n; i++) newstr += str[(i-cnt+n)%n]; str = newstr; } void Extend(string &str, int cnt) { for(int i=0; i<cnt; i++) str += '*'; } void Shrink(string &str, int cnt) { if(cnt >= str.length()) str = ""; else str = str.substr(0, (int)str.length()-cnt); } void Reverse(string &str) { reverse(str.begin(), str.end()); } void Put(string &str, int i, char c) { if(i > str.length()) return; str[i-1] = c; } void Print(string str) { cout << str << endl; } int main() { string order, str=""; getline(cin, str); cin >> order; while(order != "EXIT") { //cout << order << endl; //cout << str << endl; if(order == "SHIFT-R" || order == "SHIFT-L") { int cnt; cin >> cnt; if(order[6] == 'L') ShiftLeft(str, cnt); else ShiftRight(str, cnt); } else if(order == "EXTEND") { int cnt; cin >> cnt; Extend(str, cnt); } else if(order == "SHRINK") { int cnt; cin >> cnt; Shrink(str, cnt); } else if(order == "REVERSE") { Reverse(str); } else if(order == "PUT") { int i; char c; cin >> i >> c; Put(str, i, c); } else if(order == "PRINT") { Print(str); } cin >> order; } return 0; }
منبع سوال: وبسایت کوئرا
اگر روش حل بهتری برای “تمرین ماشین متنی” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم. اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.
ارسال پاسخ