9 משתנים תויים (char) ומחרוזות (strings)

עד כה הכרנו משתנים פרימיטיביים מספריים (כדוגמת int, float), ומשתנים פרימיטיביים בולאניים. בפרק זה נכיר סוג נוסף של משתנים פרימיטיביים: משתנים תוויים (character variables).

בתכניות שאנו כותבים, לעיתים עלינו להחזיק תווים (כדוגמת אותיות או סימנים אחרים, למשל: !) ומחרוזות (כגון שם של תלמיד) במשתנים של התכנית. משתנים מטיפוס char, ומערכים של משתנים מטיפוס char הם שיאפשרו לנו להשיג מטרה זאת.

9.1 משתנים תוויים (char)

הסבר כתוב אודות משתנים תוויים

9.1.pdf

הגדרת משתנים תויים ושימוש בסיסי בהם

הסבר כתוב אודות הגדרת משתנים תוויים ושימוש בסיסי בהם

9.1a.pdf

תרגול עצמי בסיסי בנושא משתנים תוויים

כתבו תכנית הקוראת מהמשתמש שני תווים, ומדפיסה את כל התווים ביניהם. לדוגמה: אם המשתמש יקיש A ואח"כ z אזי יודפסו כל התווים שבין ה- A (הגדולה) ל: z (הקטן).

משתנים תוויים - דוגמה בסיסית נוספת

9.1.1 משתנים תוויים - קריאת מספר טבעי, ע"י קריאת ספרותיו בזו אחר זו

9.1.1.pdf

תרגול עצמי בסיסי בנושא קריאת תווים

כתבו תכנית הקוראת תווים ומתעלמת מהם כל עוד לא מוזנת לה אות לטינית קטנה (בתחום a..z). עתה התכנית ממשיכה לקרוא תווים כל עוד מוזנות לה אותיות קטנות, והא שומרת את האות הלטינית הקטנה הגדולה ביותר שהוזנה לה. עת מוזן לה תו שאינו אות לטינית קטנה התכנית עוצרת את הקריאה ומציגה את האות הלטינית הקטנה הגדולה ביותר שהיא קראה.

למשל, עבור הקלט: dcyef3-+! תוצג האות y. התכנית תחלוף על-פני סימן הקריאה' ה: + וה: -. תקרא את dcyef ותמצא את y כאות הקטנה הגדולה ביותר; ותעצור עת היא תקרא את 3.

9.1.2 קריאת שורה שאורכה לא ידוע, וחישוב ממוצע הערכים בה

הסבר כתוב אודות: קריאת שורה שאורכה לא ידוע, וחישוב ממוצע הערכים בה

9.1.2.pdf

9.2 מחרוזות

משתנה תווי הוא יצור נחמד אך קצת חלש. במקרים רבים בהם יש לנו צורך לטפל בתווים אנו זקוקים למשתנה שיוכל להחזיק מחרוזת שלמה (כגון "yosi"), ולא רק תו בודד. מערך חד-ממדי של תווים הוא הכלי שיאפשר לנו להחזיק מחרוזת שלמה, ומייד נראה כיצד. (לעיתים נשתמש במילה האנגלית 'סטרינג' במקום עמיתתה העברית 'מחרוזת'.)

9.2.1 צעדים ראשונים במחרוזות - מערך של תווים


הסבר כתוב אודות מערך של תווים

9.2.1.pdf

9.2.2 קלט פלט והשמה של מחרוזות

הסבר כתוב אודות קלט ופלט של מחרוזות

9.2.2.pdf

9.2.3 פונקציות הספריה: strcpy, strcmp, strlen, strcat לטיפול במחרוזות, ויחס הסדר המילוני (לקסיקוגרפי)

הסבר כתוב אודות: פונקציות הספריה: strcpy, strcmp, strlen, strcat לטיפול במחרוזות, ויחס הסדר המילוני (לקסיקוגרפי)

9.2.3.pdf

תרגול עצמי בסיסי בנושא מחרוזות

כתבו תכנית הקוראת מהמשתמש סדרת מחרוזות עד קריאת המחרוזת END. התכנית תדפיס את המחרוזת הארוכה ביותר שהיא קראה, ואת זו הגדולה ביותר מבחינת יחס הסדר הלקסיקוגרפי.

לדוגמה, אם הקלט יהיה:

abc cc bbbb aaa bab END

אזי המחרוזת הארוכה ביותר הינה bbbb והגדולה ביותר הינה cc

9.2.4 מערך של מחרוזות

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

תיאור המשתנים המרכזיים (מבני הנתונים) בהם התכנית המחזיקה מערך של מחרוזות עושה שימוש

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

9.2.4a.pdf

תרגול עצמי בסיסי בנושא מערך של מחרוזות

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

התכנית תקרא מחרוזות למערך עד מילויו, או עד קריאת המחרוזת END.

עתה התכנית תדפיס את המחרוזות שהיא קראה.

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

תיאור הפונ' המרכזית של הדוגמה: זו שקוראת את המחרוזות (ומשתמשת בפונ' עזר)

הסבר כתוב אודות תיאור הפונ' המרכזית של הדוגמה: זו שקוראת את המחרוזות (ומשתמשת בפונ' עזר)

9.2.4b.pdf

תיאור פונ' העזר של הדוגמה: search, insert

הסבר כתוב אודות פונ' העזר של הדוגמה: search, insert

9.2.5c.pdf

9.2.5 הסבר כתוב אודות הפונ' cin.getline ואיתחול של מחרוזות

9.2.5.pdf

9.2.6 הסבר כתוב אודות מימוש הפונ' strcmp

הפונ' strcmp עומדרת לרשותנו כפונ' ספריה, ואיננו צריכים לממש אותה. אולם לשם התרגול אנו יכולים לשאול את עצמנו כיצד נראה מימוש הפונ'? כלומר: מה הקוד שכתב מי שהכין את הפונ' עבורנו?

9.2.6.pdf

9.2.7 פרמטרים של main שהינם: argc, argv

הסבר כתוב אודות argc, argv

9.2.7.pdf

תרגול עצמי בסיסי בנושא: argc, argv

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

לדוגמה: אם הרצת התכנית תהיה:

./my_prog yosi dana ab abc x

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

9.3 תרגילים

9.3.pdf