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

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

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

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

 

 

در مورد سایت کوئرا بیشتر بخوانید…

 

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

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

**

 

 

حل سوال ماشین متنی (به زبان برنامه نویسی سی پلاس پلاس)

#include <bits/stdc++.h> 
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]