0Pricing
C++ Academy · درس

خوارزميات السلاسل النصية

ابحث وقسّم بكفاءة

خوارزميات السلاسل النصية درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

البحث باستخدام find

تُرجع find فهرس السلسلة الفرعية أو npos إذا لم تكن موجودة، وتعمل مباشرةً على العرض دون نسخ.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "key=value";
    auto pos = sv.find('=');
    std::cout << pos << "\n"; // 3
}

التحقق من npos

قارنوا دائمًا نتيجة البحث مع std::string_view::npos قبل استخدامها فهرسًا.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "abc";
    if (sv.find('z') == std::string_view::npos)
        std::cout << "not found\n";
}

التحقق من البادئة واللاحقة

تجعل starts_with وends_with في C++20 المقصود واضحًا، وتجنبان المقارنات اليدوية للسلاسل الفرعية.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "report.pdf";
    std::cout << sv.starts_with("report") << "\n";
    std::cout << sv.ends_with(".pdf") << "\n";
}

استخراج حقل

اجمعوا بين find وsubstr لتقسيم زوج مفتاح/قيمة دون تخصيص سلاسل جديدة.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "name=Ada";
    auto eq = sv.find('=');
    std::cout << sv.substr(0, eq) << " : " << sv.substr(eq + 1) << "\n";
}

التقسيم باستخدام فاصل

يمكنكم المرور عبر الرموز عبر البحث المتكرر عن الفاصل واستخراج عروض فرعية؛ إذ لا يكون كل رمز إلا عرضًا.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "a,b,c";
    size_t start = 0, pos;
    while ((pos = sv.find(',', start)) != std::string_view::npos) {
        std::cout << sv.substr(start, pos - start) << "\n";
        start = pos + 1;
    }
    std::cout << sv.substr(start) << "\n";
}

البحث من النهاية

يبحث rfind إلى الخلف، وهو مفيد للحصول على امتداد ملف أو آخر فاصل.

#include <iostream>
#include <string_view>
int main() {
    std::string_view path = "/usr/local/bin";
    auto slash = path.rfind('/');
    std::cout << path.substr(slash + 1) << "\n"; // bin
}

إزالة المسافات البيضاء

استخدموا find_first_not_of وfind_last_not_of مع remove_prefix/remove_suffix لإزالة المسافات البيضاء، وكل ذلك دون نسخ.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "  hi  ";
    sv.remove_prefix(sv.find_first_not_of(" "));
    sv.remove_suffix(sv.size() - 1 - sv.find_last_not_of(" "));
    std::cout << "[" << sv << "]\n"; // [hi]
}

مقارنة العروض

تدعم العروض == وcompare للمقارنة المعجمية، إذ تقارن المحارف لا المؤشرات.

#include <iostream>
#include <string_view>
int main() {
    std::string_view a = "apple", b = "apple";
    std::cout << (a == b) << "\n"; // 1
}

عدّ التكرارات

تتيح حلقة تستخدم find وتتقدم بعد كل تطابق معرفة عدد مرات ظهور محرف أو سلسلة فرعية.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "mississippi";
    int count = 0;
    for (size_t p = sv.find('s'); p != std::string_view::npos; p = sv.find('s', p + 1)) ++count;
    std::cout << count << "\n"; // 4
}

تبقى الخوارزميات دون تخصيص

تعمل جميع هذه العمليات على المخزن المؤقت الأساسي نفسه. وتكون الرموز والنتائج التي أزيلت مسافاتها عروضًا فرعية، ولا يحدث تخصيص على الكومة إلا عند إنشاء std::string.

انتبهوا إلى أعمار البيانات

تشترك العروض الفرعية الناتجة عن هذه الخوارزميات في عمر المخزن المؤقت الأصلي. لا تسمحوا لها بتجاوز عمر السلسلة المصدر.

تحقّق سريع

تحققوا من فهمكم لخوارزميات string_view.

مراجعة

لقد تعلّمتم خوارزميات السلاسل على العروض:

  • تُرجع find/rfind مواضع أو npos.
  • تتحقق starts_with/ends_with من البادئات واللواحق.
  • ينتج عن التقسيم وإزالة المسافات البيضاء وتقسيم الرموز عروض فرعية دون تخصيص.
  • تشترك العروض الفرعية في عمر المصدر؛ لذا انتبهوا إلى العروض المعلّقة.

الأسئلة الشائعة

هل درس «خوارزميات السلاسل النصية» مجاني؟

نعم — نص درس «خوارزميات السلاسل النصية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «خوارزميات السلاسل النصية»؟

ابحث وقسّم بكفاءة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «خوارزميات السلاسل النصية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا string_view
  2. إنشاء العروض
  3. المشكلات ودورات الحياة
  4. خوارزميات السلاسل النصية
← العودة إلى C++ Academy