English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستتعلم كيفية التعامل مع السلاسل في C. ستتعلم كيفية تعريفها وتحديثها وكيفية استخدامها في عمليات الإدخال والإخراج المختلفة.
السلسلة هي مجموعة من الحروف. يُستخدم في لغة برمجة C++ نوعان من السلاسل عادةً:
كائن سلسلة كنوع objekt من نوع string (كلاس string من مكتبة C++ القياسية)
سلسلة C (C-style string)
في برمجة C، يتم تخزين مجموعة الحروف كنوع array، ويدعم برمجة C++ هذا النوع أيضًا. لذلك، تُسمى سلسلة C (C-string).
سلسلة C هي مجموعة من أنواع char تُنتهي بحرف النص الظاهري \0 (قيمة ASCII لحرف النص الظاهري هو 0).
char str[] = "C++";
في الكود المذكور أعلاه، str هي سلسلة تحتوي على 4 حروف.
بالرغم من أن “c++” يحتوي على 3 حروف، يتم إضافة حرف النص الظاهري \0 تلقائيًا إلى نهاية السلسلة.
char str[4] = "C++"; char str[] = {'C','+','+','\0'}; char str[4] = {'C','+','+','\0'};
مثلما هو الحال في الأنواع الحسابية، لا تحتاج إلى استخدام جميع المساحات المخصصة للسلسلة. على سبيل المثال:
char str[100] = "C++";
برنامج C++ يعرض السلسلة النصية التي أدخلتها.
#include <iostream> using namespace std; int main() { char str[100]; cout << "أدخل سلسلة: "; cin >> str; cout << "أدخلت: " << str << endl; cout << "\nادخل سلسلة نصية أخرى: "; cin >> str; cout << "أدخلت: "<<str<<endl; return 0; }
نتيجة الإخراج
ادخل سلسلة نصية: C++ أدخلت: C++ ادخل سلسلة نصية أخرى: Programming is fun. أدخلت: Programming
لاحظ أن في المثال الثاني، يتم عرض “Programming” فقط وليس “Programming is fun.”.
هذا لأن عمليات الاستخراج >> تعتبر مسافات النص “ ” كحروف انتهاء.
برنامج C++ يقرأ ويظهر السطر الكامل الذي أدخلته.
#include <iostream> using namespace std; int main() { char str[100]; cout << "ادخل سلسلة نصية: "; cin.get(str, 100); cout << "أدخلت: " << str << endl; return 0; }
نتيجة الإخراج
ادخل سلسلة نصية: Programming is fun. أدخلت: Programming is fun.
لقراءة النص الذي يحتوي على مسافات، يمكنك استخدام دالة cin.get(). هذه الدالة لها معاملان.
المعامل الأول هو اسم السلسلة (عنوان العنصر الأول في السلسلة)، والمعامل الثاني هو الطول الأقصى للمصفوفة.
في البرنامج السابق، str هو اسم السلسلة، 100 هو الطول الأقصى للمصفوفة.
في C ++، يمكنك أيضًا إنشاء سلسلة نصية لتحفظ السلسلة.
على عكس استخدام مصفوفة char، لا تملك سلسلة النوع طولًا ثابتًا ويمكنها التوسع حسب الحاجة.
#include <iostream> using namespace std; int main() { // تخصيص سلسلة نصية string str; cout << "أدخل سلسلة: "; getline(cin, str); cout << "أدخلت: " << str << endl; return 0; }
نتيجة الإخراج
أدخل سلسلة: Programming is fun. أدخلت: Programming is fun.
في هذا البرنامج، تم تخصيص str كنوع string. ثم تم سؤال المستخدم عن السلسلة.
بالإضافة إلى استخدام cin>> أو cin.get()، يمكنك أيضًا استخدام getline() للحصول على سطر النص المدخل.
تستخدم دالة getline() تدفق الإدخال كمعامل أولي، cin وstr كمواقع لتحديد السطر الذي سيتم تخزينه.
تُنقل السلاسل بنفس الطريقة إلى الدوال،يمكن أيضًا نقل الأنواع إلى الدوال.
#include <iostream> using namespace std; void display(char *); void display(string); int main() { string str1; char str[100]; cout << "أدخل سلسلة: "; getline(cin, str1); cout << "أدخل سلسلة أخرى: "; cin.get(str, 100, '\n'); display(str1); display(str); return 0; } void display(char s[]) { cout << "السلسلة المدخلة كنص: " << s << endl; } void display(string s) { cout << "السلسلة المدخلة هي: " << s << endl; }
نتيجة الإخراج
أدخل سلسلة: Programming is fun. أدخل سلسلة أخرى: Really? السلسلة المدخلة هي: Programming is fun. مصفوفة النصوص المدخلة هي: هل حقا؟
في البرنامج أعلاه، يتم طلب إدخال نصين. يتم تخزينها في str وstr1 على التوالي، حيث هي مصفوفة نصية، بينما هي كائن نصي.
ثم، لدينا هاتان الوظيفتان display()، التي تضيف النص إلى النص.
الفرق الوحيد بين هاتين الوظيفتين هو المعلمات. الوظيفة الأولى display() تأخذ مصفوفة من النصوص كمعلمة، بينما تأخذ الوظيفة الثانية string كمعلمة.
هذا العمل يسمى تحميل الوظائف. تعرف علىتحميل الوظائفمعلومات إضافية.