→ חזרו אחורה

פרק 7 - מחרוזות

⏱ 14 דקות קריאה

כבר עבדנו עם string מהפרק הראשון, אבל עד עכשיו רק שמרנו טקסט והדפסנו אותו. בפרק הזה נלמד להסתכל על מחרוזת בתור רצף של תווים - ממש כמו מערך - ולבצע עליה פעולות שימושיות.

1. מחרוזת היא רצף של תווים

אפשר לחשוב על המחרוזת "Java" כעל מערך של 4 תווים: J, a, v, a - ולכל תו יש אינדקס, בדיוק כמו במערך, שמתחיל מ-0.

2. אורך מחרוזת: Length

⁦C#⁩

string word = "Java";
Console.WriteLine(word.Length);
            
שימו לב:Length נכתב בלי סוגריים, בדיוק כמו אורך של מערך - שלא כמו ב-Java, שבו length() נכתב עם סוגריים.

3. גישה לתו בודד

ב-⁦C#⁩, אפשר לגשת לתו בודד במחרוזת בדיוק כמו במערך - עם סוגריים מרובעים:

⁦C#⁩

string word = "Java";
Console.WriteLine(word[0]);
Console.WriteLine(word[3]);
            

word[0] מחזיר את התו הראשון: J.

word[3] מחזיר את התו הרביעי (אינדקס 3): a.

4. השוואת מחרוזות

ב-⁦C#⁩, אפשר (ומקובל) להשוות תוכן של מחרוזות פשוט עם == - שלא כמו ב-Java, שם חייבים להשתמש ב-equals(). ב-⁦C#⁩, הסימן == על מחרוזות כבר יודע להשוות לפי התוכן.

⁦C#⁩

string name1 = "Java";
string name2 = "Java";

Console.WriteLine(name1 == name2);
            
שימו לב: אם תעברו לקרוא קוד Java, זכרו שההפך הוא הנכון שם - == לא בטוח להשוואת תוכן מחרוזות ב-Java, וצריך להשתמש ב-equals().

5. פעולות שימושיות נוספות

פעולה מה היא עושה דוגמה
Substring(start, len) מחזירה חלק מהמחרוזת, מאינדקס start ובאורך len תווים "Java".Substring(1, 2)"av"
ToUpper() מחזירה את המחרוזת באותיות גדולות "java".ToUpper()"JAVA"
IndexOf(x) מחזירה את האינדקס הראשון של x, או -1 אם לא נמצא "Java".IndexOf("v")2
⚠️ שימו לב: הפרמטר השני של Substring ב-⁦C#⁩ הוא אורך (כמה תווים לקחת), ולא אינדקס סיום כמו ב-substring של Java - הבדל קטן שקל לפספס.

6. מעבר על מחרוזת עם לולאה

בדיוק כמו במערך, אפשר לעבור על כל התווים במחרוזת בעזרת לולאת for ואינדקס:

⁦C#⁩

string word = "Java";
int vowelCount = 0;

for (int i = 0; i < word.Length; i++)
{
    char c = word[i];
    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
    {
        vowelCount++;
    }
}

Console.WriteLine("תנועות: " + vowelCount);
            

זה בדיוק אותו "מונה" שהכרנו בפרק המערכים - רק שהפעם עוברים על תווים של מחרוזת ולא על תאי מערך.

7. טעויות נפוצות

בלבול עם Substring: לשכוח שהפרמטר השני הוא אורך ולא אינדקס סיום, ולקבל תוצאה קצרה/ארוכה מהצפוי.

אינדקס מחוץ לטווח: גישה ל-word[i] עם אינדקס גדול מדי (או שלילי) תזרוק שגיאת IndexOutOfRangeException.

🎓 זווית הבגרות

איך זה מופיע בבגרות: מחרוזות מופיעות כמעט בכל שאלה שיש בה טקסט - חיפוש תו, ספירת תווים מסוג מסוים, או פירוק מחרוזת לחלקים.

סוג שאלה טיפוסי: מעבר על כל תווי המחרוזת בלולאה עם אינדקס כדי לספור/לבדוק תנאי על כל תו - בדיוק כמו מעבר על מערך.

טעות נפוצה: לבלבל בין הפרמטר השני של Substring (אורך) לבין אינדקס סיום כמו ב-Java - זה גורם לתוצאה קצרה או ארוכה מהצפוי.

מה לזכור למבחן: ב-⁦C#⁩ מותר להשוות מחרוזות עם == (הוא משווה תוכן) - אבל אם עוברים לפתור שאלה ב-Java, זה בדיוק ההפך.

8. תרגול

מה יודפס למסך על ידי הקוד הבא?

⁦C#⁩
string s = "hello";
Console.WriteLine(s[1] + "" + s[4]);

כתבו קוד שמדפיס את האורך של המחרוזת word.

כתבו קוד שמדפיס את התו הראשון של המחרוזת word.

כתבו תנאי שבודק אם המחרוזת name1 שווה בתוכנה למחרוזת name2.

פרק 6 - מתודות פרק 8 - מערך דו-ממדי