با استفاده از تابع زیر با وارد کردن رشته, موقعیت شروع بررسی, جهت کاراکتر (چپ یا راست آن), کاراکتری که انتظارش را داریم و کاراکتری که باید نادیده گرفته شود و از آن عبور کرد می توانیم قبل و بعد یک کاراکتر را بررسی کنیم.

به طور کلی اگر میخواهیم بدانیم که بلافاصله پس از یک کاراکتر و با گذر از یک کاراکتر خاص مثل فضا های خالی کاراکتری مد نظر آمده است یا که خیر از این تابع استفاده می کنیم.

اگر متوجه نشدید کد را بررسی کنید.

این تابع در آموزش گام به گام ساخت یک زبان برنامه نویسی ساده تحت ++C به کار می آید.
 

enum direction { prev = -1, next = 1 }; // بر اساس این در حلقه اشاره گر متن با کمک متغیر با کم یا زیاد شدن به عقب و جلو حرکت می کند.

bool check (char*, int, direction, char, char); // تعریف شود main قبل از

 

// شرح تابع به زبان فارسی از راست به چپ: بررسی کن که ( در رشته str, از موقعیت pos_, و پس یا پیش از آن تا انتها یا ابتدایش, با نادیده گرفتن ignore_, آیا char_ وجود دارد؟)

bool check (char _str[], int _pos, direction _direction, char _ignore, char _char) // تعریف شود main بعد از
{
    bool answer = false, con = true;
    
    for (int i = _pos; con == true; i += _direction) // موقعیت آغاز بررسی برابر است با موقعیتی که وارد می کنیم و حلقه تا وقتی که مجوز ادامه صادر شود ادامه می یابد همچنین جهت حرکت اشاره گر متن بر اساس مثبت یا منفی بودن جهت وارد شده به سمت راست یا چپ حرکت می کند
    {
        if ( _str[i] == _char && i != _pos ) // اگر کاراکتری که هم اکنون روی آن هستیم برابر بود با کاراکتر مورد توقع و موقعیت کنونی دقیقا با موقعیتی که از آن شروع کرده ایم برابر نبود (به این دلیل که خود کاراکتری که از آن شروع به بررسی رشته کرده ایم به حساب نمی آید) حلقه را از ادامه باز بدار و جواب را مثبت اعلام کن
        {
            con = false;
            answer = true;
        }
        else if ( _str[i] != _ignore && _str[i] != _char && i != _pos) con = false; // اگر شرط اول درست نبود و کاراکتری بر روی ان هستیم کاراکتری نیست که نادیده اش بگیریم و همچنین کاراکتری نیست که منتظرش بودیم تابع را از حرکت باز نگه دار و همان جواب منفی را اعلام کن
        

// اگر هیچ کدام از شروط درست نبود حلقه مجددا تا انتها یا ابتدای رشته تکرار می شود
    }
    return answer;
}

 به عنوان مثال میخواهیم بدانیم که آیا با گذر از فضاهای خالی بلافاصله پس از a کاراکتر b آمده است یا نه:

char alphabet[] = "    a        b  c  d";

check (alphabet, 4, next, 32, 'c');

 

 result: 0

 جواب منفی است چرا که با گذر از فضاهای خالی بعد از a که موقعیت ۴  را در رشته دارد b آمده است نه c.


این مطلب توسط GreatMAK  نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.