تخطَّ إلى المحتوى

std::string

النصوص القياسية std::string

std::string نوع نصوص كامل يدير ذاكرته تلقائيًا، بعكس مصفوفات char الخام الموروثة من C التي تحتاج إدارة يدوية.

std::string يغلّف نصًا قابلًا للتغيير بطول ديناميكي، ويوفّر عمليات جاهزة: الدمج بـ +، المقارنة بـ ==، البحث بـ find، القص بـ substr، وأكثر — كلها بأمان ذاكرة كامل بلا الحاجة لـ strcpy أو strlen اليدويتين من مكتبة C. يُخزَّن داخليًا بشكل شبيه جدًا بـ std::vector<char> من حيث إدارة الذاكرة والتحجيم التلقائي.

الصياغة

std::string name = "text";
name.length(); name.substr(start, len); name.find(sub);

📄 مثال

#include <string>

std::string greeting = "مرحبًا";
std::string name = "سارة";
std::string full = greeting + " " + name;

std::cout << full;              // مرحبًا سارة
std::cout << full.length();     // طول النص
std::cout << full.find("سارة"); // موضع الكلمة، أو npos لو غير موجودة

أهم النقاط

العنصرالوظيفة
length() / size()عدد المحارف الحالي — الاسمان مترادفان تمامًا
substr(start, len)استخراج نص جزئي بدءًا من موضع معيّن وبطول محدد
find(sub)موضع أول ظهور لنص فرعي، أو std::string::npos لو لم يوجد
operator+ / +=دمج نصوص بسهولة — يخصّص ذاكرة جديدة تلقائيًا حسب الحاجة

💡 نصائح عملية

  • قارن نتيجة find() دائمًا مع std::string::npos وليس مع -1 — npos هو ثابت حجمه غير موقّع بقيمة أقصى
  • مرّر std::string كمعامل لدالة بـ const std::string& دائمًا لتفادي نسخ النص كاملًا

⚠️ أخطاء شائعة

  • مقارنة find() بـ -1 مباشرة بدل std::string::npos — قد لا يترجم أو يعطي نتيجة خاطئة صامتة حسب النوع
  • استخدام مصفوفات char الخام وmemcpy/strcpy بكود C++ حديث بدل std::string الأأمن والأوضح

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CPP الكامل بالعربي.