اذهب إلى المحتوى

السؤال

نشر

كيف يمكنني التحقق من وجود كلمة في جملة معينة بإستخدام لغة ++C، فعلى سبيل المثال لدي المتغيرين التاليين:

std::string s1 = "Hello, world";
std::string s2 = "world";

كيف يمكنني التحقق برمجيًا من أن المتغير s1 يحتوي على قيمة المتغير s2؟

في لغات أخرى مثل Python يمكنني إستعمال المعامل in للتحقق من هذا الأمر، كيف أقوم بنفس الشيء في لغة ++C؟

Recommended Posts

  • 1
نشر

يحتوي النوع string على التابع find والتي يقوم بإرجاع فهرس النص الذي تبحث عنه:
 

#include <iostream>
#include <string>

int main()
{
    std::string s1 = "Hello, world";
    std::string s2 = "world";

    // التحقق من وجود قيمة المتغير s2 داخل قيمة المتغير s1
    if (s1.find(s2) != std::string::npos) {
        std::cout << "found '" << s2 << "' in '" << s1 << "'" << '\n';
    }

    return 0;
}

في حالة وجود النص s2 داخل قيمة المتغير s1 سوف يتم طباعة الجملة 

found 'world' in 'Hello, world'

 

  • 0
نشر

يمكنك التأكد من ذلك عبر إستخدام الregex عن طريق الدالة regex_replace التي تقوم بأخذ مُعاملات كالتالي

  • النص المُراد تطبيق النمط عليه
  • النمط
  • النص الذي سيتم إستبداله بدلًا من النمط

وتقوم بإرجاع النص الجديد, فيمكنك تنفيذ الدالة على النص الموجود لديك وتعطي في النص المُستبدِل قيمة فارغة أي يتم حذفه, ومن ثم مقارنة طول النص الجديد بالنص القديم, إن تغير الطول هذا يعني أنهم لم يُصبحو نفس النص, أي أن الكلمة موجودة , ويمكن تطبيق ذلك عبر الشفرة البرمجية التالية

string a = "hello world";
string b = "hello";
regex re(b);
string c = regex_replace(a,re,"");
if(c.length()<a.length())
  cout<<"true";
else
  cout<<"false"

 

  • 0
نشر

في الإصدارات الحديثة من ++C يمكنك استخدام الدالة: std::string::contains

#include <string>

string str1 = std::string("Hello wael");
string str2 = std::string("wael");

if (str1.contains(str2))
{
    // found! , موجودة
}

ويمكن استخدام std::regex_search

std::string str1 = "Hello wael";

std::string str2 "wael";

// تجاهل حالة الأحرف icase
auto rx = std::regex{ str2,std::regex_constants::icase };

// البحث
bool isStrExists = std::regex_search(testString, rx);

rx هو تعبير منتظم، يحوي السلسلة كوسيط أول، ثم عامل التحقق مع تجاهل حالة الأحرف، ثم استدعاء الدالة std::regex_search التي تعيد قيمة منطقية true في حال إيجاد السلسلة الجزئية.

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...