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 الكامل بالعربي.