آموزش ++c, زبان c++

واروخوانه در سی پلاس پلاس (Palindrome in cpp)

واروخوانه در سی پلاس پلاس

در این قسمت تیم کدگیت را با آموزش واروخوانه در سی پلاس پلاس (palindrome) همراهی کنید. پیش نیاز این آموزش آشنایی با حلقه و روش بازگشتی است.

واروخوانه (palindrome)

قلب مستوی یا جناس قلب، همچنین شناخته شده با نام واروخوانه که معادل فارسی ایست برای پالیندروم  (Palindrome) به واژه، جمله، عدد یا هر چیز دیگری گفته می‌شود که خواندن آن از چپ به راست یا از راست به چپ کاملاً یکسان باشد. به‌عنوان مثال عدد ۱۵۳۴۳۵۱ یک عدد واروخوانه است، یا واژه «Malayalam» که نام یکی از زبانهای محلی جنوب غربی هندوستان است ویا واژه “داد” از این قاعده پیروی می‌کنند(ویکیپدیا).

واروخوانه در سی شارپ

پیاده سازی واروخوانه در سی پلاس پلاس

پیاده سازی واروخوانه در سی پلاس پلاس به دو صورت انجام میگیرد.

  1. پیاده سازی با روش بازگشتی
  2. پیاده سازی غیر بازگشتی

در این جا ما هر دو روش را توضیح میدهیم.

برای پیاده سازی واروخوانه ما از یک رشته استفاده میکنیم به عنوان متنی برای بررسی واروخوانه بودن یا نبودن. سپس الگوریتم را بر روی رشته اجرا میکنیم. کد زیر الگوریتم غیر بازگشتی واروخوانه است.

int loop_palindrome(string &str){
    int max = str.length() -1 ;
    for (int i = 0;  i < max/2; ++ i) {
        if (str[i] != str[max - i] ) {
            return 0;
        }
    }
    return 1;
}

ایده کلی کد بالا به این صورت است که ما رشته دریافتی را به صورت آرایه از کاراکتر در می آوریم. سپس دو متغیر به خانه اول و آخر آرایه اشاره میکند(low و high در کد ما میشود start و end).حال تنها کاری که نیاز داریم این است که بررسی کنیم آرایه ما در خانه low و hight مقادیر برابری دارند یا خیر. بعد یک قدم به جلوتر میرویم و خانه های بعدی آرایه را بررسی میکنیم. تصویر زیر گویای کل مسئله است.

واروخوانه در سی شارپ

کد پیاده سازی بازگشتی واروخونه در سی پلاس پلاس در زیر آمده است.

int recursive_palindrome(int start, int end, string &str)
{
    if (start >= end)
        return 1;
    if (str[start] != str[end]){
        return 0;
    }
    return recursive_palindrome(++start, --end, str);
}

از لحاظ مقدار کد این روش خیلی کوتاهتر است و ساده تر. در روش بازگشتی ما هر بار خانه اول و آخر را بررسی میکنیم و اگر با هم برابر بودند باید بقیه رشته نیز همین شرط (برابری کاراکتر اول و آخر) برقرار باشد و ما این کار را به صورت بازگشتی انجام میدهیم تا موقعی که طول رشته کوچکتر یا برابر با 1 شود.

تست برنامه

برای تست کدهای بالا کد main زیر را بزنید.

int main() {
    string palindrome = "radar";
    int result = recursive_palindrome(0,palindrome.length()-1,palindrome);
    if (result>0) {
        cout << "is palindrome"<< endl;
    }else{
        cout << "not palindrome"<< endl;
    }

    result = loop_palindrome(palindrome);
    if (result>0) {
        cout << "is palindrome"<< endl;
    }else{
        cout << "not palindrome"<< endl;
    }

    return 0;
}

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *