من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

پاسخ سوال ماشین متنی کوئرا

پاسخ سوال ماشین متنی کوئرا
پاسخ سوال ماشین متنی کوئرا

پاسخ سوال ماشین متنی کوئرا

در این نوشته تمرین “ماشین متنی” که در وب‌سایت کوئرا موجود است را برای شما کاربران عزیز حل کرده‌ایم.

 

پاسخ سوال ماشین متنی کوئرا

در این سوال از شما خواسته شده است تا یک ماشین متنی کوچک با مجموعه‌ای از قابلیت‌های ساده را پیاده‌سازی نمایید. روال کار بدین صورت است که در آغاز کار برنامه یک رشته متنی اولیه(به طول حداکثر 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;
}

منبع سوال‌: وبسایت کوئرا

 

اگر روش حل بهتری برای “تمرین ماشین متنی” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم. اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]