יסודות התכנות בשפת C#‎ · פרק 9 — עבודה עם מחרוזות – string⌂📚🏠
פרק 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
המאם ותד (أ. همام وتد) — כל זכויות הספר שמורות למחבר. הספר נכתב בערבית, ותרגם אותו לעברית פהד גאנם. המהדורה העברית מתפרסמת באישור המחבר, עם תיקונים שאישר. ליצירת קשר עם המחבר: hammam4112@gmail.com