פרק 7 - מחרוזות
כבר עבדנו עם string מהפרק הראשון, אבל עד עכשיו רק שמרנו טקסט והדפסנו אותו. בפרק הזה
נלמד להסתכל על מחרוזת בתור רצף של תווים - ממש כמו מערך - ולבצע עליה פעולות שימושיות.
1. מחרוזת היא רצף של תווים
אפשר לחשוב על המחרוזת "Java" כעל מערך של 4 תווים: J, a,
v, a - ולכל תו יש אינדקס, בדיוק כמו במערך, שמתחיל מ-0.
2. אורך מחרוזת: Length
string word = "Java";
Console.WriteLine(word.Length);
Length נכתב בלי סוגריים, בדיוק כמו אורך של מערך - שלא כמו
ב-Java, שבו length() נכתב עם סוגריים.
3. גישה לתו בודד
ב-C#, אפשר לגשת לתו בודד במחרוזת בדיוק כמו במערך - עם סוגריים מרובעים:
string word = "Java";
Console.WriteLine(word[0]);
Console.WriteLine(word[3]);
word[0] מחזיר את התו הראשון: J.
word[3] מחזיר את התו הרביעי (אינדקס 3): a.
4. השוואת מחרוזות
ב-C#, אפשר (ומקובל) להשוות תוכן של מחרוזות פשוט עם == - שלא כמו ב-Java, שם חייבים
להשתמש ב-equals(). ב-C#, הסימן == על מחרוזות כבר יודע להשוות לפי התוכן.
string name1 = "Java";
string name2 = "Java";
Console.WriteLine(name1 == name2);
== לא בטוח
להשוואת תוכן מחרוזות ב-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 ואינדקס:
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. תרגול
מה יודפס למסך על ידי הקוד הבא?
string s = "hello";
Console.WriteLine(s[1] + "" + s[4]);
כתבו קוד שמדפיס את האורך של המחרוזת word.
כתבו קוד שמדפיס את התו הראשון של המחרוזת word.
כתבו תנאי שבודק אם המחרוזת name1 שווה בתוכנה למחרוזת name2.