أساسيات البرمجة بلغة السي شارب · الفصل 9 — التعامل مع الجمل النصية – stringעבודה עם מחרוזות · יסודות התכנות בשפת C#‎⌂📚🏠
الفصل 9

التعامل مع الجمل النصية – string

עבודה עם מחרוזות

تعرفنا سابقا على نوع المُعطيات والبيانات النصية (جُمل) وفي هذا الفصل سنتوسع قليلا في التعامل مع هذه الجمل النصية. من الجدير بالذكر أن نوع جملة نصية string هو فئة في لغة السي شارب لها أهمية بالغة في التعامل مع النصوص.

الجمل النصية التي يتم تخزينها في متغير من نوع string هي مجموعة من الرموز مرتبة الواحدة بجانب الأخرى وهي موجودة في كل نصوص الحواسيب (UNICODE) وترتيبها يذكرنا بالمصفوفة، إذ أن الجُملة هي عبارة عن مصفوفة من الرموز (chars) ولكن نوع هذه الجملة هو string.

تعريف متغير من نوع string:

stringاسم مُتغير;

طبعا هذا تصريح عن المُتغير ولكنه لا يحتوي قيمة ذات معنى. (فيه قمامة) لذلك يجدر بنا اعطاؤه قيمة بدائية أو استقبال قيمة وتخزينها فيه من المُستخدم.

إعطاء قيمة بدائية على النحو التالي:

stringاسم مُتغير=”جملة نصية“;
مثال 9.1
string name = "Hammam";

نستطيع أيضا:

string name;
name = "Hammam";

استقبال من المُستخدم:

stringاسم مُتغير;اسم المُتغير= Console.ReadLine( ) ;

ننتبه أن استقبال المُعطيات من نوع string يتم بواسطة Console.ReadLine() ولا حاجة لأن نستعمل العملية Parse

هنا لم نكتب جملة استعلامية، ولكن مُفضل دائماً أن نكتب جمله استعلامية للمُستخدم لكي نوضح له أي بيانات ومعطيات نريد أن نستقبلها منه.

مثال 9.2
string name;
Console.Write("Insert your name: "); // جملة استعلامية
name = Console.ReadLine();

طباعة الجمل النصية تتم بواسطة استعمال Console.Write( ) كما تعلمنا سابقاً وكذلك طباعة قيمة مُتغيرات من نوع string

مثال 9.3
Console.WriteLine("I am Hammam!");

سنتعلم عمليات تعمل على الجمل النصية:

9.1 Length – אורך המחרוזת

إذا شغلنا عملية Length على مُتغير من نوع جملة نصية فان هذه العملية تُعطينا قيمة صحيحة وهي طول هذه الجملة النصية من ناحية رموز (عدد الرموز بالجملة يشمل رمز الفراغ).

مثال 9.4
static void Main(string[] args)
{
    int l1;
    string name = "Hammam Wattad!";
    string user_name; // نستقبل اسم المُستخدم
    Console.Write("insert your name with your family name:");
    user_name = Console.ReadLine();

    l1 = name.Length;
    Console.WriteLine("The length of my name is {0}",l1);
    Console.WriteLine("The length of your name is {0}",user_name.Length);
}
Microsoft Visual Studio Debug Console
insert your name with your family name:Abd wattad
The length of my name is 14
The length of your name is 10

هذه العملية سبق وأن تعاملنا معها في المصفوفة، وهذا يدل أننا نتعامل مع الجملة النصية كالمصفوفة حيث أن الجُملة هي عبارة عن مصفوفة من الرموز (chars) ولكن نوع هذه الجملة هو string.

9.2 الأقواس [ ] – הסוגריים המרובעים

تماما مثل المصفوفة يمكن أن نتوجه لكل رمز ورمز داخل المصفوفة حسب رقمها التسلسلي واستعمال الأقواس المربعة [ ] مع اسم المُتغير من نوع جملة string كما رأينا بالمصفوفات. اول رمز بالجملة النصية رقمه التسلسلي هو 0 أما آخر حرف في الجملة فرقمه التسلسلي هو Length-1

المُتغيرات من نوع جمل نصية string هي متغيرات للقراءة ولا يمكن أن نُغير محتوى رموزها خلال عمل البرنامج.

مثال 9.5
static void Main(string[] args)
{
  string name = "Hammam";
  char first_char = name[0];
  char last_char = name[name.Length-1];
  Console.WriteLine("The first character of my name is: {0}",first_char);
  Console.WriteLine("The last character of my name is: {0}", last_char);
}

عند تشغيل البرنامج نحصل على ما يلي:

Microsoft Visual Studio Debug Console
The first character of my name is: H
The last character of my name is: m
سؤال 9.1: أكتب برنامج يستقبل من المُستخدم اسمه ويطبع الجملة التالية “Your name is unique” اذا كان اسمه هو اسم خاص. الاسم الخاص هو اسم فيه أول حرف وآخر حرف هما نفس الحرف.

الحل:

static void Main(string[] args)
{
    string name;
    Console.Write("Insert your name: ");
    name = Console.ReadLine();

    char first_char = name[0] ;
    char last_char = name[name.Length - 1];
    if(first_char == last_char)
        Console.WriteLine("Your name is unique");
}

إذا شغلنا البرنامج للمُدخل mriam سنحصل على النتيجة التالية:

Microsoft Visual Studio Debug Console
Insert your name: mriam
Your name is unique

9.3 تطابق نصوص (مساواه) Equals – השוואת מחרוזות

هذه العملية تقارن بين جملتين حسب الرموز الموجودة فيها.

العملية تعطي قيمة:

لذلك نحفظ قيمة العملية (ما تُعيده لنا من قيمة) في مُتغير من نوع بولياني (bool).

مثال 9.6
"Hammam".Equals("hammam");    //false
"hammam".Equals("hammam");    // true
string.Equals("Hammam", "hammam");   //false
string.Equals("hammam", "hammam");   //true
سؤال 9.2: اكتب برنامج محفوظ فيه كلمة مرور سابقة هي: A4fortN8
على البرنامج أن يستقبل كلمة مرور (باسوورد) من المستخدم، إذا أدخل المُستخدم كلمة مرور صحيحة (تتطابق حتى مع أحرف كبيرة وصغيرة) فان البرنامج يطبع كمية المال الموجودة في حساب البنك للمُستخدم (نفرض أنها 3243.2 شيكل)، اما اذا كانت كلمة المرور خطأ فان البرنامج لن يعطي أي معلومة وسيطبع أن كلمة المرور خطأ.
static void Main(string[] args)
{
    string real_password = "A4fortN8";
    string password;
    bool pass;

    Console.Write("Insert a password: ");
    password = Console.ReadLine();

    pass = real_password.Equals(password);
    if (pass)
        Console.WriteLine("you own 3243.2 shekels");
    else
        Console.WriteLine("Password incorrect");
}

بعض النتائج بعد التشغيل:

Microsoft Visual Studio Debug Console
Insert a password: Hammam
Password incorrect
Microsoft Visual Studio Debug Console
Insert a password: A4fortN8
you own 3243.2 shekels
Microsoft Visual Studio Debug Console
Insert a password: A4fortn8
Password incorrect

9.4 مقارنة نصوص CompareTo – השוואת סדר מחרוזות

هي عملية تقارن بين جملتين حسب قواعد الترتيب في ثقافة الحاسوب (culture) وليس حسب رقمها التسلسلي (الكود) في جدول ASCII.

int string.CompareTo(string? strB)

إذا كانت:

مثال 9.7
static void Main(string[] args)
{
    string s1 = "ahmad";
    string s2 = "ahmed";
    string s3 = "ali";
    string s4 = "hammam";
    Console.WriteLine(s4.CompareTo(s3));        // 1
    Console.WriteLine(s1.CompareTo(s2));        //-1
    Console.WriteLine(s3.CompareTo(s1));        //1
    Console.WriteLine(s4.CompareTo("hammam"));  //0
}

هذه العملية تُستعمل لترتيب الكلمات ترتيبا أبجدياُ . (كما في القاموس).

9.5 الغاء الفراغات الزائدة Trim و TrimStart وTrimEnd – קיצוץ רווחים

هي عملية تعمل على جملة نصية وتحذف الفراغات الزائدة (المتكررة) من الجملة.

مثال 9.8
static void Main(string[] args)
{
    string str = "     Hammam abd wattad      ";
    string str_all, str_start, str_end;
    str_all = str.Trim();
    str_start = str.TrimStart();
    str_end = str.TrimEnd();
    Console.WriteLine("str_all ={0}"+"!",str_all);
    Console.WriteLine("str_start ={0}"+"!", str_start);
    Console.WriteLine("str_end ={0}"+"!", str_end);
}

بعد تشغيل البرنامج نحصل على ما يلي:

Microsoft Visual Studio Debug Console
str_all =Hammam abd wattad!
str_start =Hammam abd wattad      !
str_end =     Hammam abd wattad!

9.6 تحويل أحرف ToUpper و ToLower – המרת אותיות

ToUpper هي عملية تحول الأحرف الصغيرة في الجملة الى كبيرة.

string string.ToUpper()

ToLower هي عملية تحول الأحرف الكبيرة في الجملة الى صغيرة.

string string.ToLower()
مثال 9.9
static void Main(string[] args)
{
    string s1 = "Hammam Abd Wattad \nMr.Wattad is a teacher";
    Console.WriteLine(s1);
    Console.WriteLine("************");
    s1 = s1.ToUpper();
    Console.WriteLine(s1);
    Console.WriteLine("************");
    s1 = s1.ToLower();
    Console.WriteLine(s1);
}

بعد تشغيل البرنامج حصلنا على ما يلي:

Microsoft Visual Studio Debug Console
Hammam Abd Wattad
Mr.Wattad is a teacher
************
HAMMAM ABD WATTAD
MR.WATTAD IS A TEACHER
************
hammam abd wattad
mr.wattad is a teacher

9.7 مكان رمز في جملة IndexOf – מיקום תו במחרוזת

هي عملية تُعطينا مكان ظهور رمز داخل جملة نصية. (حسب رقم المؤشر التسلسلي أي أن أول خانة هي صفر). إذا لم يكن الرمز موجوداً فان العملية تُعطي القيمة 1- .

مثال 9.10
static void Main(string[] args)
{
    string s1 = "Hammam Abd Wattad";
    int i,j,k;
    i = s1.IndexOf("b");    //8
    j = s1.IndexOf('b');    //8
    k = s1.IndexOf("Abd");  //7

    Console.WriteLine("i = {0}",i);
    Console.WriteLine("j = {0}", j);
    Console.WriteLine("k = {0}", k);
}

عند تشغيل البرنامج نحصل على:

Microsoft Visual Studio Debug Console
i = 8
j = 8
k = 7

9.8 استبدال رمز بآخر في جملة Replace – החלפת תו במחרוזת

هي عملية تستبدل رمزا او مقطع من الجملة برمز آخر أو بجملة أخرى.

string string.Replace(char oldChar, char newChar)
مثال 9.11
static void Main(string[] args)
{
    string s1 = "Hammam Abd Wattad \nMr.Wattad is a teacher";
    Console.WriteLine(s1);
    Console.WriteLine("*********");
    s1=s1.Replace("Wattad", "Hamad");
    Console.WriteLine(s1);
}

بعد تشغيل البرنامج نحصل على:

Microsoft Visual Studio Debug Console
Hammam Abd Wattad
Mr.Wattad is a teacher
*********
Hammam Abd Hamad
Mr.Hamad is a teacher

9.9 اقتطاع قسم من النص Substring – חיתוך תת-מחרוזת

هي عملية تُعطينا قسم من جملة نصية من مكان مُعين نُحدده وبالطول الذي نُحدده .

مثال 9.12
static void Main(string[] args)
{
    string s1 = "Hammam Abd Wattad";
    string s2;

    s2 = s1.Substring(7, 3); // "Abd"
    Console.WriteLine(s2);
    Console.WriteLine(s1.Substring(11,1));// "W"
    Console.WriteLine(s2.Substring(0, 1));// "A"
}

بعد التشغيل نحصل على النتيجة التالية:

Microsoft Visual Studio Debug Console
Abd
W
A
همام عبد اللطيف وتد — جميع حقوق هذا الكتاب محفوظة للمؤلف. النسخة الإلكترونية منشورة في fahed-lab.com بإذنه، مع تصحيحات وافق عليها. للتواصل مع المؤلف: hammam4112@gmail.com