Professional Documents
Culture Documents
פרק 8 - מחרוזות
פרק 8 - מחרוזות
פרק 8
מחרוזות Strings -
;}int Arr[5]={0,1,2,3,4
ניתן לאתחל מערכים בצורה זו אך ורק בשורת ההגדרה.
הערכים מוצבים בתאים לפי הסדר החל מהתא הראשון.
אם אין מספיק ערכים ,שאר התאים מאותחלים לערך .0
;}int Arr[5]={1,2
;}int Arr[5]={0
אם לא נציין את מספר תאי המערך ,הוא יהיה כמספר ערכי
האתחול (בדוגמא הבאה יהיו לו 6תאים):
;}int Arr[]={1,2,3,4,5,6
SCE-Chapter-8-Strings Shayke Bilu PhD
חזרה -מערכים אחרי שורת ההגדרה
3
גודל מערך יכול להיות קבוע שמוגדר ב( #define -כי זה מספר
המוגדר גלובלית אינו יכול להשתנות במהלך הריצה).
#define SIZE 10
;]int arr[SIZE
בהגדרת מערך הגודל שלו חייב להיות מספר קבוע ,או משתנה
גלובלי ולא יכול להיות ערך של משתנה.
למשל:
;]int arr[10 ;]//int arr[SIZE
;int my_size=10 ולא:
;]int arr[my_size
?שאלות
הגדרת מחרוזת.
אתחול מחרוזת וסימון סוף מחרוזת.
קלט/פלט של מחרוזות.
פעולות על מחרוזות.
מציאת אורך מחרוזת.
איתור תו במחרוזת.
פונקציות פנימיות על מחרוזות.
פונקציות פנימיות על תווים.
מערכים דו ממדיים ומחרוזות.
SCE-Chapter-8-Strings Shayke Bilu PhD
מחרוזות
24
מחרוזת היא רצף תווים בעל משמעות כלשהי (למשל מילה או
משפט).
לשמירת מחרוזת בזיכרון נשתמש באופן טבעי במערך של תווים.
למשל:
;]char word[SIZE
אבל בהרבה מקרים נתייחס אל מחרוזת בבת-אחת ,ולא רק
כמערך של תווים (למשל לקלוט מילה בבת-אחת ולא תו-תו).
כמו-כן ,במקרים רבים אורך המחרוזת לא ידוע מראש (יתכן
שנקבל מהקלט מילה קצרה יותר מגודל המערך).
נכיר היום פקודות ופונקציות-ספריה שכבר נכתבו במיוחד לצורך
עבודה עם מחרוזות ,ומאפשרות להתגבר על הבעיות האלה.
SCE-Chapter-8-Strings Shayke Bilu PhD
מחרוזות – אתחול
25
‘H’ ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’ . . . .
]str[0 ]str[9
• הגדרת מחרוזת
• גבול מחרוזת
• אתחול מחרוזת
תו סיום ''\0 •
• מציאת אורך מחרוזת
?שאלות
דרך נוספת להגבלת מספר התווים הנקלטים היא לבצע לולאה ולקלוט
תו אחרי תו ,הקלט לא נפסק כשמגיעים לרווח אלא רק כאשר נקלט
סימן ירידת השורה "."\n
SCE-Chapter-8-Strings Shayke Bilu PhD
פלט של מחרוזת שלמה
37
?שאלות
string1==string2
string1=string2
string1>=string2
הסיבה לכך היא שכמו במערכים ,שם המחרוזת הוא מצביע המכיל
את הכתובת שלה בזיכרון ,לכן גם פעולות אלה יבוצעו על
הכתובות ולא על תוכן המחרוזת.
#include <stdio.h>
#include <string.h>
#define SIZE 7
int main()
}
int Obama_votes = 0 , Romney_votes=0;
char vote[SIZE];
while(1)
}
printf(“Please enter your vote:)Obama or Romney)\n");
printf(“Enter Stop for exit program\n");
scanf("%s", vote);
SCE-Chapter-8-Strings Shayke Bilu PhD
? מה עושה התוכנית הבאה:דוגמא
47
if (strcmp(vote, "Obama")==0) התוכנית קולטת בחירות של
Obama_votes++; בוחרים ומונה את ההצבעות
else .לאובמה ורומני
if (strcmp(vote, "Romney")==0) במידה ויש טעות הקלדה מבקשים
Romney_votes++; .קלט חדש
else stop כל זה עד שנקלטת המילה
if (strcmp(vote, "Stop")==0) .ועוצרת את הקליטה
break;
אחרי העצירה מודפסות התוצאות
else .של הבחירות
printf("Wrong vote !!!\n");
{
printf("Obama received %d votes and Romney received %d
votes\n",Obama_votes, Romney_votes);
{
SCE-Chapter-8-Strings Shayke Bilu PhD
הפונקציה – )atoi(str
48
?שאלות
#include <stdio.h>
#include <string.h>
#define SIZE 81
void main()
{
char str1[SIZE]={"Shalom on you "};
char str2[SIZE]={"Shalom on ISRAEL "};
printf("String str1 as: %d chars\n", strlen(str1));
printf("String str2 as: %d chars\n", strlen(str2));
SCE-Chapter-8-Strings Shayke Bilu PhD
תוכנית המדגימה שימוש בפונקציות
66
?שאלות
#include <stdio.h>
#include <string.h>
#define SIZE 81
void main()
{
char str1[SIZE]={“Shalom”};
char str2[SIZE]={“Shlomit”};
char ch='@', ch1='$';
int num=4;
כדי להתייחס לתו מסוים רושמים אותו בין גרש מימין לגרש
משמאל ,למשל‘a’ :
כדי להתייחס למחרוזת רושמים בתוך גרשיים כפולים ,למשל:
”“HELLO
אם רושמים ” “aהמשמעות היא מחרוזת שיש בה את התו ’‘a
ואחריו את התו ’ .‘\0כלומר זה שונה מאשר לרשום ’.‘a
כשעושים פעולות על מחרוזות ,משתמשים בפונקציות פנימיות,
יש להקפיד על רישום גרשיים כפולים ,למשל:
)”strcmp(input,”a
ולא:
)’strcmp(input,’a
SCE-Chapter-8-Strings Shayke Bilu PhD
הספריה ctype.hפונקציות על תווים
77
?שאלות