C++الدالة rfind()
تعريفها
تبحث في النص الذي قام بإستدعائها عن آخر index يوجد إبتداءاَ من عنده نفس النص أو الحرف الذي نمرره لها مكان الباراميتر str
و ترجعه.
بمعنى آخر, نعطيها أي نص أو حرف, فترجع لنا رقم آخر خانة وجد عندها.
إفتراضياً هذه الدالة تبدأ عملية البحث من الـ index الأخير في النص الذي قام باستدعائها إلى الـ index رقم 0.
و في حال لم يتم العثور على النص المراد البحث عنه ترجع قيمة الثابت string::npos
.
بناؤها
size_t rfind (const string& str, size_t pos = 0) const
باراميترات
- مكان الباراميتر
str
نمرر النص الذي ستبحث عنه الدالة في النص الذي قام بإستدعائها. - الباراميتر
pos
هو باراميتر إختياري, نضع مكانه رقم في حال أردنا جعل الدالة توقف عملية البحث قبل الوصول لرقم index محدد.
قيمة الإرجاع
ترجع رقم يمثل آخر index وجد عنده النص أو الحرف الذي مررناه لها, و ترجع قيمة الثابت string::npos
في حال لم يتم إيجاد تطابق.
المثال الأول
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
في البرامج الفعلية, قد يكون أسلوب التشييك المستخدم لمعرفة ما إن تم إيجاد القيمة أم لا هو الأنسب لك.
المثال الثاني
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