Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals 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
size_t rfind (const string& str, size_t pos = 0) const
size_t rfind (const string& str, size_t pos = 0) const noexcept
size_t rfind (const string& str, size_t pos = 0) const noexcept


باراميترات

  • مكان الباراميتر 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;
}
#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
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;
}
#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
'cat' is found at index 19