Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

C++الدالة rfind()

تعريفها

تبحث في النص الذي قام بإستدعائها عن آخر index يوجد إبتداءاَ من عنده نفس النص أو الحرف الذي نمرره لها مكان الباراميتر str و ترجعه.
بمعنى آخر, نعطيها أي نص أو حرف, فترجع لنا رقم آخر خانة وجد عندها.

إفتراضياً هذه الدالة تبدأ عملية البحث من الـ index الأخير في النص الذي قام باستدعائها إلى الـ index رقم 0.
و في حال لم يتم العثور على النص المراد البحث عنه ترجع قيمة الثابت string::npos.



بناؤها

C++ 98
C++ 11
size_t rfind (const string& str, size_t pos = 0) const


باراميترات

  • مكان الباراميتر str نمرر النص الذي ستبحث عنه الدالة في النص الذي قام بإستدعائها.
  • الباراميتر pos هو باراميتر إختياري, نضع مكانه رقم في حال أردنا جعل الدالة توقف عملية البحث قبل الوصول لرقم index محدد.


قيمة الإرجاع

ترجع رقم يمثل آخر index وجد عنده النص أو الحرف الذي مررناه لها, و ترجع قيمة الثابت string::npos في حال لم يتم إيجاد تطابق.



المثال الأول

Main.cpp
#include <iostream>

using namespace std;

int main()
{
    // str هنا قمنا بتعريف متغير نصي إسمه
    string str = "I have one cat. My cat like milk.";

    // و بالتالي سيتم طباعة 19 'c' يوجد عندها النص str هنا قمنا بطباعة رقم آخر خانة في المتغير
    cout << str.rfind("c") << endl;
    
    // و بالتالي سيتم طباعة 19 'cat' يوجد عندها النص str هنا قمنا بطباعة رقم آخر خانة في المتغير
    cout << str.rfind("cat") << endl;
    
    // مع الإشارة إلى أننا أوقفنا عملية البحث عند الخانة رقم 14. و بالتالي سيتم طباعة 11 'cat' يوجد عندها النص str هنا قمنا بطباعة رقم آخر خانة في المتغير
    cout << str.rfind("cat", 14) << endl;
    
    // string::npos و بما أنه لا يوجد هذه الكلمة, سيتم طباعة قيمة الثابت .'dog' يوجد عندها النص str هنا قمنا بطباعة رقم آخر خانة في المتغير
    cout << str.rfind("dog") << endl;

    return 0;
}

سنحصل على النتيجة التالية عند التشغيل.

19
19
11
18446744073709551615


في البرامج الفعلية, قد يكون أسلوب التشييك المستخدم لمعرفة ما إن تم إيجاد القيمة أم لا هو الأنسب لك.

المثال الثاني

Main.cpp
#include <iostream>

using namespace std;

int main()
{
    // keyword و الكلمة التي سنبحث عنها في المتغير str هنا قمنا بتعريف النص الأساسي في المتغير
    string str = "I have one cat. My cat like milk.";
    string keyword = "cat";

    // result و تخزين نتيجة البحث في المتغير keyword الموجودة في المتغير "cat" عن الكلمة str هنا قمنا بالبحث في النص الموجود في المتغير
    size_t result = str.rfind(keyword);
    
    // string::npos مع قيمة result هنا قمنا بمقارنة قيمة
    // إن لم تكونا متساويتين, فهذا يعني أنه تم إيجاد الكلمة التي بحثنا عنها و سيتم طباعة رقم آخر خانة تم عنده إيجاد الكلمة
    if (result != string::npos)
    {
        cout << "'" << keyword << "' is found at index " << result;
    }
    // إذا كانت متساويتين فهذا يعني أنه لم يتم إيجاد الكلمة التي بحثنا عنها و سيتم طباعة أنه لم يتم العثور عليها
    else
    {
        cout << "'" << keyword << "' is not found!";
    }

    return 0;
}

سنحصل على النتيجة التالية عند التشغيل.

'cat' is found at index 19