Top Banner
SCE-Chapter-8-Strings פרק8 מחרוזות- Strings ד" ר שייקה בילו יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע מומחה למערכות מידע חינוכיות, אקדמיות ומנהליותShayke Bilu PhD קורס יסודות התכנות בשפתC 1
99

C Programming chapter 8

Apr 20, 2023

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C Programming chapter 8

SCE-Chapter-8-Strings

8פרק

Strings -מחרוזות

בילור שייקה "ד

יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע

אקדמיות ומנהליות, מומחה למערכות מידע חינוכיות

Shayke Bilu PhD

Cקורס יסודות התכנות בשפת

1

Page 2: C Programming chapter 8

אתחול מערכים בשורת ההגדרה -חזרה

SCE-Chapter-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};

Shayke Bilu PhD

2

Page 3: C Programming chapter 8

SCE-Chapter-8-Strings

אחרי שורת ההגדרהמערכים -חזרה

אחרי הגדרת המערך אפשר רק להתייחס לכל תא בנפרד.

אחת-אפשר לשים ערכים בתאי המערך בבת-אי :

י "אחת את כל התאים ע-אפשר לאפס בבת-למשל איArr=0

י לולאה"צריך לעשות זאת ע:

for(i=0; i<SIZE; i++)

Arr[i]=0;

י פעולת השמה "לא ניתן להעתיק מערך למערך אחר עArr1=Arr2 זה מחייב שימוש בלולאה:

for(i=0; i<SIZE; i++)

Arr[i]=Bll[i];

וכו, קלט, הדפסה, כך גם לגבי פעולות השוואה'

3

Shayke Bilu PhD

3

Page 4: C Programming chapter 8

SCE-Chapter-8-Strings

מגבולות המערךחריגה -חזרה

הוגדר גודל מערך :define SIZE 10#

מותר לגשת לכל תא במערך לפי כתובתו.

לגשת לתאים שנמצאים מחוץ למערך אסור.

גישה לתא שנמצא מחוץ למערך תגרום לבעיות:

בסבירות גבוהה התוכנית תקרוס.

או שהיא פשוט לא תעבוד כראוי.

למשל:

4

int arr[SIZE];

int i = 0;

for ( i=0; i <= SIZE; i++ )

{

arr[i] = i;

} arr[10] לא שייך למערך!

Shayke Bilu PhD

4

Page 5: C Programming chapter 8

לב-תשומתנקודה -חזרה

גודל מערך יכול להיות קבוע שמוגדר ב- #define ( כי זה מספר

(.המוגדר גלובלית אינו יכול להשתנות במהלך הריצה

#define SIZE 10

int arr[SIZE]; או משתנה , בהגדרת מערך הגודל שלו חייב להיות מספר קבוע

.גלובלי ולא יכול להיות ערך של משתנה

למשל :

int arr[10]; //int arr[SIZE];

int my_size=10; ולא :

int arr[my_size];

5

SCE-Chapter-8-Strings Shayke Bilu PhD

5

Page 6: C Programming chapter 8

דוגמא -מערכים -חזרה

#include <stdio.h>

#define SIZE 10

int main()

{

int i, num, digits[SIZE]={0};

printf(“Enter a positive integer:\n”);

scanf(“%d”, &num);

while (num!=0)

{

digits[num%10]++;

num=num/10;

}

for (i=0; i<SIZE; i++)

printf(“Digit %d appeared %d times\n”,i,digits[i]);

}

6

מספר שלם חיובי ומדפיסה כמה קולטת התוכנית

פעמים הופיעה בו כל סיפרה

במערך iבכתובת אותה מציין תא

מספר ההופעות יופיע מספר המייצג את

numבמספר iשל הספרה

SCE-Chapter-8-Strings

6

Shayke Bilu PhD

Page 7: C Programming chapter 8

SCE-Chapter-8-Strings

מערך לפונקציה העברת -חזרה

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

. סכום המספרים במערך

הקריאה לפונקציה:

sum = calc_sum(array);

כותרת הפונקציה:

int calc_sum(int array[ ]);

בכותרת הפונקציה] [ -אין צורך חובה לציין את גודל המערך בתוך ה.

אין צורך להעביר את גודל המערך במידה והוא הוגדר כמשתנה גלובלי.

מציין היות המשתנה מערך לוקאלי לפונקציה זו בלבד ] [ -סימון ה!!!

Shayke Bilu PhD

7

Page 8: C Programming chapter 8

פונקציה שמסכמת מערך -חזרה

#include <stdio.h>

#define SIZE 10

int calc_sum(int arr[])

{

int i, sum = 0;

for(i=0; i<SIZE; i++)

sum=sum+arr[i];

return sum;

}

int main()

{

int input[SIZE], i;

for(i=0; i<SIZE; i++)

scanf("%d", &input[i]);

printf("The sum is %d\n", calc_sum(input, 10));

return 0;

}

8

קריאה לפונקציה

הסכוםפונקציית

קליטת המערך

, עוברים על תאי המערך בלולאה

מסכמים אותם לתוך משתנה סוכם

ומחזירים את הסכום כאשר בסיום

SCE-Chapter-8-Strings Shayke Bilu PhD

8

Page 9: C Programming chapter 8

פונקציית סכום איברים -חזרה

int sumf(int arr[])

}

int sum=0,i;

for(i=0 ; i<SIZE ; ++i)

sum+=arr[i];

printf("The sum of array is : %d\n", sum);

{

9

SCE-Chapter-8-Strings Shayke Bilu PhD

9

Page 10: C Programming chapter 8

משתנים קבועים לפונקציההעברת -חזרה

SCE-Chapter-8-Strings

אפשר להגדיר משתני קלט בפונקציה כקבועים(const .) כך נוכל להבטיח שלא נשנה בטעות את ערך המשתנה.

הכי שימושי כאשר אנו מעבירים מערך לפונקציה.

לא ניתן להעביר מערך שהוגדר כקבוע(const ) לפונקציה שבה הוא

.לא קבוע ועלול להשתנות

void print_array(const int array[])

{

int i = 0;

for( i=0; i<SIZE; i++ )

printf("%3d",array[i]);

printf("\n");

{

Shayke Bilu PhD

10

Page 11: C Programming chapter 8

SCE-Chapter-8-Strings

void printArrayZogi(int a[ ][ COLUMN ])

{

int i, j;

for ( i = 0; i < ROW; i++ )

{

for ( j = 0; j < COLUMN; j++ )

if(a[i][j] % 2 == 0)

printf( "%4d", a[i][j]);

printf( "\n" );

}

}

פונקציה המקבלת מערך דו ממדי -חזרה

השורותמעבר על

איברי השורה הדפסת

הזוגיים בלבד

Shayke Bilu PhD

11

עמודותמעבר על

Page 12: C Programming chapter 8

SCE-Chapter-8-Strings

#include <stdio.h>

#define ROW 3

#define COLUMN 4

void printArray(int [ ][ COLUMN ]);

int main()

{

int array1[ ROW ][ COLUMN ] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};

printf( "Values in array1 by row are:\n" );

printArray( array1);

return 0;

}

תוכנית השולחת לפונקציה -חזרה

מערך דו ממדי המודפס בתוכה

Shayke Bilu PhD

12

Page 13: C Programming chapter 8

SCE-Chapter-8-Strings

void printArray(int a[ ][ COLUMN ])

{

int i, j;

for ( i = 0; i < ROW; i++ )

{

for ( j = 0; j < COLUMN; j++ )

printf( "%4d", a[ i ][ j ] );

printf( "\n" );

}

}

תוכנית השולחת לפונקציה -חזרה

מערך דו ממדי המודפס בתוכה

Shayke Bilu PhD

13

Page 14: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

14

Page 15: C Programming chapter 8

(לינארי)חיפוש במערכים - 2תרגיל

. במקרה זה נתון מערך ממוין שנרצה לחפש בו איבר כלשהו

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

.באינדקס שימוש י"ע לתנועה

5 8 9 12 15 17 20 21 24 27 29 31

15

, לינארי, י חיפוש רגיל"במערך ע 17במקרה זה נחפש את הערך

תוך כדי מעבר על כל איברי המערך מהאיבר הראשון לאחרון עד

למציאתו או לאי מציאתו במערך

SCE-Chapter-8-Strings Shayke Bilu PhD

15

Page 16: C Programming chapter 8

Shayke Bilu PhD SCE-Chapter-8-Strings

פתרון חיפוש לינארי במערכים

#include <stdio.h>

#define SIZE 5

int linarySearch(int arr[], int item )

{

int i;

for(i=0;i<SIZE;i++)

{

if (arr[i] == item)

{

printf(“The item %d in place %d”,arr[i], i+1);

return 1;

}

}

return 0;

}

16

Page 17: C Programming chapter 8

התוכנית הראשית

int main()

{

int arr[SIZE]={1,2,3,4,5},item=5,status=0;

status=linarySearch( arr,item);

if(status == 1)

printf(“Item is found in array!!!\n");

else

printf(“Item is not found in array!!!\n");

return 0;

}

17

SCE-Chapter-8-Strings Shayke Bilu PhD

17

Page 18: C Programming chapter 8

(בינארי)חיפוש במערכים - 3תרגיל

. נתון מערך ממוין נרצה לחפש בו איבר כלשהו

חיפוש בינארי הוא חיפוש לאורך המערך תוך כדי חלוקתו לחצי

והגדרת תחום ימני ותחום שמאלי המשתנים לפי התקדמות

.החיפוש

5 8 9 12 15 17 20 21 24 27 29 31

18

כמות חלוקת י"ע המערך בתוך בינארי בחיפוש 24 את נחפש

אותו המספר בין היחס בדיקת כדי תוך לחצי פעם כל המערך איברי

.באמצע העומד במערך המספרי הערך לבין מחפשים

SCE-Chapter-8-Strings Shayke Bilu PhD

18

Page 19: C Programming chapter 8

במערכיםחיפוש - 3תרגיל

5 8 9 12 15 17 20 21 23 24 29 31

19

לחצי חיפוש כל המערך חלוקת י"ע בינארי חיפוש 24 את נחפש

כל לאחר ,בו ימצא והוא יתכן בו בחצי פעם כל 24 הערך וחיפוש

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

SCE-Chapter-8-Strings Shayke Bilu PhD

19

Page 20: C Programming chapter 8

Shayke Bilu PhD SCE-Chapter-8-Strings

#include <stdio.h>

#define SIZE 10

int binarySearch(int arr[ ], int item )

{

int lsize=0, rsize=SIZE-1, middle;

while ( lsize <= rsize )

{

middle = (rsize + lsize ) / 2;

if ( item == arr[ middle ] ) return 1;

if ( item < arr[ middle ] )

rsize = middle-1;

else

lsize = middle+1;

}

return 0; }

פתרון חיפוש בינארי במערכים 20

Page 21: C Programming chapter 8

התוכנית הראשית

int main()

{

int arr[SIZE]={1,2,3,4,5,6,7,8,9,10};

int item=5, status=0;

status=binarySearch(arr,item);

if(status == 1)

printf(“Item is found in array!!!\n");

else

printf(“Item is not found in array!!!\n");

return 0;

}

21

SCE-Chapter-8-Strings Shayke Bilu PhD

21

Page 22: C Programming chapter 8

SCE-Chapter-8-Strings

?הקודם השעורשאלות על

Shayke Bilu PhD

22

Page 23: C Programming chapter 8

נושאי הפרק מחרוזות

הגדרת מחרוזת.

אתחול מחרוזת וסימון סוף מחרוזת.

פלט של מחרוזות/קלט.

מחרוזותפעולות על.

מציאת אורך מחרוזת.

איתור תו במחרוזת.

פונקציות פנימיות על מחרוזות.

פונקציות פנימיות על תווים.

מערכים דו ממדיים ומחרוזות.

23

SCE-Chapter-8-Strings Shayke Bilu PhD

23

Page 24: C Programming chapter 8

מחרוזות

למשל מילה או )מחרוזת היא רצף תווים בעל משמעות כלשהי

(. משפט

לשמירת מחרוזת בזיכרון נשתמש באופן טבעי במערך של תווים .

למשל:

char word[SIZE];

ולא רק , אחת-אבל בהרבה מקרים נתייחס אל מחרוזת בבת

(. תו-אחת ולא תו-למשל לקלוט מילה בבת)כמערך של תווים

יתכן )במקרים רבים אורך המחרוזת לא ידוע מראש , כן-כמו

(.שנקבל מהקלט מילה קצרה יותר מגודל המערך

ספריה שכבר נכתבו במיוחד לצורך -נכיר היום פקודות ופונקציות

.ומאפשרות להתגבר על הבעיות האלה, עבודה עם מחרוזות

24

SCE-Chapter-8-Strings Shayke Bilu PhD

24

Page 25: C Programming chapter 8

אתחול –מחרוזות

יש דרך טבעית יותר לאתחל מערך שמייצג מחרוזת , לדוגמא

(:במקום לרשום את התווים מופרדים בפסיקים)

char message[ ]=“Hello dear C student”;

ולא בגרשיים , " "שימו לב שמשתמשים כאן בגרשיים כפולים

.כמו שעשינו עבור תו בודד' ' בודדים

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

י השמתם בתוך גרשים "ייצוג תווים בודדים כחלק ממחרוזת יעשה ע' '.

לבין קליטת תו בין גרשים( בין גרשיים)זהו ההבדל בין קליטת מילה.

25

Shayke Bilu PhD SCE-Chapter-8-Strings

25

Page 26: C Programming chapter 8

SCE-Chapter-8-Strings

'\0'התו המיוחד : סימון סוף המחרוזת

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

'\0'שלפיה בסוף תווי המחרוזת מופיע במערך התו

תו זה משמעותו סיום המחרוזת( ב 0מקום- ASCII)

הכנסת התו מאפשרת לבצע פעולות על מחרוזת בלי לדעת

.מראש את אורכה

יודעים שהמחרוזת הסתיימה \0ברגע שמגיעים לתו .

26

str[0] str[9]

. ‘H’ . . . ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

Shayke Bilu PhD

26

Page 27: C Programming chapter 8

' \0'התו המיוחד : סימון סוף המחרוזת

כל הפעולות שנכיר על מחרוזות דואגות בעצמן לשמירת

.המוסכמה הזו של תו הסיום

למשל פעולת האתחול הזו:

char word[ ]=“HELLO”;

שקולה לפעולת האתחול הזו:

char word[ ]={‘H’,’E’,’L’,’L’,’O’,’\0’};

תווים 6דורשת מערך של 5מחרוזת באורך.

27

word[0]

‘H’ ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

word[5]

SCE-Chapter-8-Strings Shayke Bilu PhD

27

Page 28: C Programming chapter 8

SCE-Chapter-8-Strings

' \0'הוספת תו הסיום

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

.המחרוזת-אחרי תווי' \0'

למשל אם נבקש להשתמש בפעולות על מחרוזות עבור המערך:

char word[ ]={‘H’,’E’,’L’,’L’,’O’,’\0’};

אחרי האות ' \0'אז נצטרך להוסיף את התו'O' ידי השמה-על:

word[5]=‘\0’;

28

word[0]

‘H’ ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’

word[5]

Shayke Bilu PhD

28

Page 29: C Programming chapter 8

מציאת אורך מחרוזת: דוגמא

על בהסתמך ,שלה האורך את ומחזירה מחרוזת מקבלת הבאה הפונקציה .המחרוזת בסוף '\0' תו שיש כך

int my_strlen(char str[ ]) { int cnt=0,i=0; while (str[i ++] != '0\' ) cnt++; return cnt; }

המשתנה i המשתנה ,הלולאה זקיף והוא 0 בערך מאותחל cnt מאותחל '\0' -ל שווה במחרוזת התו כאשר ,שבמילה התווים מונה והוא 0 -ב

.הלולאה גם וכך הסתיימה שהמחרוזת סימןשל ערכו את הראשית לתוכנית מחזירה הפונקציה cnt מספר שהוא

.במחרוזת התווים

29

SCE-Chapter-8-Strings

29

Shayke Bilu PhD

Page 30: C Programming chapter 8

SCE-Chapter-8-Strings

הגדרת מחרוזת•

גבול מחרוזת•

אתחול מחרוזת•

' \0'סיום תו •

מציאת אורך מחרוזת•

מחרוזות -סיכום ביניים

Shayke Bilu PhD

30

Page 31: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

31

Page 32: C Programming chapter 8

SCE-Chapter-8-Strings

פלט של מחרוזות תו אחרי תו /קלט

בעזרת ,זה-אחר-בזה המחרוזת תווי את ולהדפיס לקלוט ניתן :c% -ב השימוש על להקפיד יש כאשר הפונקציות

scanf( ) , printf( )

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

:מתמשך לביצוע

getchar( ), putchar ) (

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

ל יש לזמן את ספריית ה"לשם השימוש בפונקציות הנ- string.h

32

Shayke Bilu PhD

32

Page 33: C Programming chapter 8

SCE-Chapter-8-Strings

קלט של מחרוזות תו אחרי תו

#include <stdio.h>

#define SIZE 201

int main()

{

char sentence[SIZE], tav;

int i=0;

do {

scanf(“%c”, &tav);//tav=getchar();

if (tav != ‘\n’)

{

sentence[ i ] = tav;

i++;

}

} while (tav != ‘\n’) ;

33

שורה אז יש להוסיף -תו ירידתלא זה אם

ומקדמים את במחרוזתלמקום הבא אותו

הזקיף

התנאי להמשך הקלט

תו במסגרת הלולאהקולטים

ומשתנה לקליטת התותווים 200 -הגדרת גודל מערך

Shayke Bilu PhD

33

Page 34: C Programming chapter 8

פלט של מחרוזות תו אחרי תו

sentence[ i ]=‘\0’;

i=0;

do

{

printf)“%c”, sentence[ i ] );

i++;

} while ( sentence[ i ] != ‘\0’) ;

return 0;

}

34

איפוס הזקיף לסימון התחלת המחרוזת

הדפסת התו במסך

קידום הזקיף לכתובת התא הבא במחרוזת

בדיקת אי קיום סוף מחרוזת להמשך ההדפסה

SCE-Chapter-8-Strings

34

סימון סיום המחרוזת

Shayke Bilu PhD

Page 35: C Programming chapter 8

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

בפונקציות שימוש ידי על אחת-בבת מחרוזות ולהדפיס לקלוט גם אפשר .”s%“ הקידוד באמצעות scanf(), printf )( :פלט הקלט

למשל:

char answer[SIZE];

scanf(“%s”, answer);

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

ה י"ע אוטומטית מוכנס '\0' התו- )(scanf המחרוזת תווי אחרי .Enter -ה מקש על ההקלדה י"ע

ב & הסימן את רושמים שלא לב שימו- scanf מחרוזת של לכתובת מצביע הוא המערך שם כי & לרשום צורך אין .שלמה

.כולה המחרוזת של הראשון התו

35

SCE-Chapter-8-Strings

35

Shayke Bilu PhD

Page 36: C Programming chapter 8

תווים' הגבלת מס –קלט של מחרוזת שלמה

התוכנית ,למערך שהגדרנו מהגודל יותר ארוכה מחרוזת כשתוכנס

.שהוגדר כפי המערך לגבול מעבר גלישה תהיה כי ,"לעוף" צפויה

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

.בלבד רווח תו עד מחרוזת תקלוט scanf ( )הפונקציה

זאת להגדיר ניתן שיקלטו התווים מספר את להגביל ורוצים במידה

.scanf( ) -ב

למשל: scanf(“%40s”, answer);

ולקלוט לולאה לבצע היא הנקלטים התווים מספר להגבלת נוספת דרך

נקלט כאשר רק אלא לרווח כשמגיעים נפסק לא הקלט ,תו אחרי תו

."\n" השורה ירידת סימן

36

Shayke Bilu PhD SCE-Chapter-8-Strings

36

Page 37: C Programming chapter 8

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

המחרוזת תווי את תדפיס הבאה הפקודה answer 0' לתו עד\'.

printf(“%s”, answer)

HELLO

אז ,המחרוזת בסוף '\0' תו אין בטעות אם printf את גם תדפיס

.'\0' לתו במקרה שיגיע עד ,בזיכרון המחרוזת אחרי שיש מה

דיגיטלי זבל" -תווים של רצף המחרוזת אחרי יודפס בפועל".

למשל:

HELLO╠╠╠╠╠Z╠╠▲¢F╢+╪■$▲@#&^!

37

SCE-Chapter-8-Strings

37

Shayke Bilu PhD

Page 38: C Programming chapter 8

38

אפשרות לקלט מחרוזות בשלמות

רווח כולל תווים מחרוזת שקולטת למחרוזות נוספת קלט פקודת:

gets(str);

כמו בדיוק פועלת הפונקציה scnaf(“%s”,str) , קולטת כלומר

.במחרוזת רווח תווי כולל מהמסך שלמה מחרוזת

מכך הנגזרת והנוחות יותר הקצרה הכתיבה ,המהירות - היתרון.

במידה ,הקלט מחרוזת אורך את להגביל ניתן לא - החיסרון

ניתן ."תעוף" התוכנית מידי ארוכה מחרוזת יכניס והמשתמש

.בלבד אחת מחרוזת רק לקלוט

38

SCE-Chapter-8-Strings Shayke Bilu PhD

Page 39: C Programming chapter 8

39

אפשרות לפלט מחרוזות בשלמות

שורה וירידת הדפסה המבצעת תואמת פלט פקודת:

puts(str);

כמו בדיוק פועלת הפונקציה printf(“%s\n”,str), מדפיסה כלומר

.שורה ירידת מבצעת ולאחריה שלמה מחרוזת

מכך הנגזרת והנוחות יותר הקצרה הכתיבה ,המהירות - היתרון.

להציג ניתן לא .הפלט מחרוזת אורך את להגביל ניתן לא - החיסרון

להדפיס ניתן .אחת רק אלא נוספת טקסט מחרוזת גם פקודה באותה

.בלבד אחת מחרוזת רק

39

SCE-Chapter-8-Strings Shayke Bilu PhD

Page 40: C Programming chapter 8

40

תו בלולאה-קלט תו •

שלמהקלט של מחרוזת •

קביעת אורך מחרוזת נקלטת•

קלט פלט מחרוזות באמצעות •

שימוש בפונקציות

של מחרוזותפלט /סיכום ביניים קלט

SCE-Chapter-8-Strings

40

Shayke Bilu PhD

Page 41: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

41

Page 42: C Programming chapter 8

פעולות על מחרוזות

שלמה מחרוזת על והשמה השוואה פעולות לבצע ניתן לא:

string1==string2

string1=string2

string1>=string2

המכיל מצביע הוא המחרוזת שם ,במערכים שכמו היא לכך הסיבה על יבוצעו אלה פעולות גם לכן ,בזיכרון שלה הכתובת את

.המחרוזת תוכן על ולא הכתובות

42

SCE-Chapter-8-Strings

42

Shayke Bilu PhD

Page 43: C Programming chapter 8

פעולות על מחרוזות

לביצוע פעולות על מחרוזת שלמה יש צורך להשתמש בפונקציות string.h: הנמצאות בספריה

העתקת , הספריה כוללת פונקציות המשמשות להשוואת מחרוזות ....ועוד, "(שרשור)"הוספת מחרוזת למחרוזת אחרת , מחרוזות

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

.הספציפיות עבורה

נחלקות לשלושה סוגים עיקריים המחרזותיותהפונקציות :

כאלה המבצעות בדיקה ומחזירות תשובה של אמת או שקר קיים או לא 1. .קיים

.וכדומה 0או 1-או 1כאלה המחזירות תשובה מספרית קבועה כגון ערך או 2.

.כאלה המבצעות פעולה ומשנות בפועל את תוכן המחרוזת3.

43

SCE-Chapter-8-Strings

43

Shayke Bilu PhD

Page 44: C Programming chapter 8

SCE-Chapter-8-Strings

פונקציות לדוגמא – string.hהספריה

:פונקציה המבצעת מציאת אורך מחרוזת

int strlen(char str[ ]); ' \0'האורך לא כולל את התו

ביצוע הפונקציה :strlen(str);

כלומר את מספר התווים , הפונקציה מחזירה את אורך המחרוזת .'\0' -במחרוזת עד תו ה

השימוש מתבצע כך:

len = strlen(my_string);

אל המשתנהlen יוחזר אורך המחרוזתmy_string

44

Shayke Bilu PhD

44

Page 45: C Programming chapter 8

SCE-Chapter-8-Strings

פונקציות לדוגמא – string.hהספריה

פונקציה המבצעת השוואה בין מחרוזות:

int strcmp(char str1[ ], char str2[ ]);

ביצוע הפונקציה :result = strcmp(str1,str2);

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

: 0-שונה מ' אחרת היא מחזירה מס ,'\0'לתו בכל תו עד

אם המחרוזת הראשונה גדולה יותר לפי ( 1)חיובי- ASCII .

לפי יותר קטנה המחרוזת הראשונה אם ( -1)שלילי- ASCII .

45

Shayke Bilu PhD

45

Page 46: C Programming chapter 8

SCE-Chapter-8-Strings

?מה עושה התוכנית הבאה: דוגמא

#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);

46

Shayke Bilu PhD

46

Page 47: C Programming chapter 8

?מה עושה התוכנית הבאה: דוגמא

if (strcmp(vote, "Obama")==0)

Obama_votes++;

else

if (strcmp(vote, "Romney")==0)

Romney_votes++;

else

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);

{

47

של בחירות קולטת התוכנית

ההצבעות את ומונה בוחרים

.ורומני לאובמה

מבקשים הקלדה טעות ויש במידה

.חדש קלט

stop המילה שנקלטת עד זה כל

.הקליטה את ועוצרת

התוצאות מודפסות העצירה אחרי

.הבחירות של

Shayke Bilu PhD

47

SCE-Chapter-8-Strings

Page 48: C Programming chapter 8

atoi(str) –הפונקציה

פונקציה המבצעת הפיכה של מחרוזת למספר שלם:

הגדרה במחשב:

#include <stdlib.h>

int atoi(const char *str );

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

int i;

i = atoi("512.035");

printf(“i=%d”,i);

512: על המסך נקבל את התוצאה

48

SCE-Chapter-8-Strings

48

Shayke Bilu PhD

Page 49: C Programming chapter 8

atoi(str) –שימוש בפונקציה

הפונקציה המבצעת הפיכה של תו למספר שלם:

הגדרת הפונקציה במחשב: int atoi(const char &str[i]); הפונקציה .iהחל מהכתובת של intומחזירה ערך שלם charמקבלת משתנה תווי

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define SIZE 81

void main()

{

int num, i=6;

char str[SIZE] = {"Shizaf218/2"};

num = atoi(&str[i]);

printf("Num = %d\n", num);

}

49

SCE-Chapter-8-Strings

49

Shayke Bilu PhD

Num = 218: את הפלט על המסך נקבל

Page 50: C Programming chapter 8

atoi(str) –דוגמה לשימוש בפונקציה 50

Shayke Bilu PhD SCE-Chapter-8-Strings

50

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void main()

}

char str1[]={'1','6','.','7','$','\0'};

char str2[]={“91.8FM”};

int mispar1,mispar2;

mispar1 = atoi(&str1[1]);

puts(str1);

printf("Mispar1=%d\n",mispar1);

mispar2 = atoi(str2);

puts(str2);

printf("Mispar2=%d\n",mispar2);

}

Page 51: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

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

void strupr(char str[ ]);

ביצוע הפונקציה :strupr(str); יגרום לכך שבתוך המחרוזתstr .כל האותיות יהפכו לאותיות גדולות

במידה ובמחרוזת : לדוגמהstr קיים המשפט :"shalom friend "נקבל בתוך הפונקציה את strupr(str)לאחר ביצוע הפונקציה

"SHALOM FRIEND": המחרוזת

51

Shayke Bilu PhD

51

SCE-Chapter-8-Strings

Page 52: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

פונקציה המבצעת הפיכה של תווי המחרוזת לאותיות קטנות:

void strlwr(char str[ ]);

ביצוע הפונקציה :strlwr(str); יגרום לכך שבתוך המחרוזתstr כל האותיות יהפכו לאותיות גדולות.

במידה ובמחרוזת : לדוגמהstr קיים המשפט:

"SHALOM FRIEND"

לאחר ביצוע הפונקציהstrlwr(str) נקבל בתוך הפונקציה את " shalom friend"המחרוזת

52

Shayke Bilu PhD

52

SCE-Chapter-8-Strings

Page 53: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

פונקציה המבצעת הפיכה שכפול של המחרוזת:

char strdup(char str[ ]);

ביצוע הפונקציה :strdup(str); יגרום לכך שהכתובת של המחרוזתstr תועבר למשתנה המקבל את הפונקציה.

במידה ובמחרוזת : לדוגמהstr קיימת המילה"SHALOM"

לאחר ביצוע הפקודה ;p=strdup(str)*: ונבצע את הפקודה הבאה

"SHALOM"נקבל את p*במידה ונרצה להדפיס את תוכן המצביע

.p*הנמצאת עכשיו גם בתוך המצביע strשהוא התוכן של המחרוזת

53

Shayke Bilu PhD

53

SCE-Chapter-8-Strings

Page 54: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

#include <stdio.h>

#include <string.h>

void main()

{

char *str = "This is a copy"; char *nstr;

// Make nstr point to a duplicate of string

nstr = strdup(str);

printf("The new string is: %s in %p\n", nstr,&nstr);

printf("The old string is: %s in %p\n", str,&str);

// Make nstr lower chars

nstr = strlwr(nstr);

printf("The new string is: %s\n", nstr);

// Make nstr uper chars

nstr = strupr(nstr);

printf("The new string is: %s\n", nstr);

}

54

Shayke Bilu PhD

54

SCE-Chapter-8-Strings

Page 55: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

:על המסך נקבל את התצוגה הבאה

55

Shayke Bilu PhD

55

SCE-Chapter-8-Strings

The new string is: This is a copy in 0031F8A4

The old string is: This is a copy in 0031F8B0

The new string is: this is a copy

The new string is: THIS IS A COPY

Page 56: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

המבצעת העתקת מחרוזת למחרוזת אחרתפונקציה:

void strcpy(char str1 [ ], char str2[ ]);

ביצוע הפונקציהstrcpy(str1,str2); יגרום לכך שלתוך המחרוזתstr1 יועתק תוכן המחרוזתstr2 .

במידה ובתוך המחרוזתstr1 היו תווים הם נדרסים.

במידה ובמחרוזת : לדוגמהstr1 קיימת המילה""shalom לאחר ביצוע הפונקציה " friend"קיימת המילה str2ובמחרוזת

:בשתי המחרוזות המילים תהינה זהות בתוכנן

"friend"

56

Shayke Bilu PhD

56

SCE-Chapter-8-Strings

Page 57: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

מחרוזות אחת אחרי השנייההמבצעת שרשור פונקציה:

void strcat(char str1[ ], char str2[ ]);

הפונקציה ביצוע strcat(str1,str2); המחרוזת שבתוך לכך יגרום str1 המחרוזת תוכן יופיע str2 של התוכן לאחר ומיד בצמוד str1.

ובמחרוזת במידה :לדוגמה str1 המשפט קיים: ""shalom dear פונקציית ביצוע לאחר "friend" המילה קיימת str2 ובמחרוזת :המשפט את תכיל str1 המחרוזתstr1 אל השרשור

"shalom dear friend”

57

Shayke Bilu PhD

57

SCE-Chapter-8-Strings

Page 58: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

פונקציה המבצעת הפיכה של מחרוזת מהסוף להתחלה:

void strrev(char str[ ]);

ביצוע הפונקציה :strrev(str); יגרום לכך שבתוך המחרוזתstr סדר התווים יתהפך מהסוף להתחלה.

במידה ובמחרוזת : לדוגמהstr קיים המשפט:

"The string reverse"

לאחר ביצוע הפונקציהstrrev(str) נקבל בתוך המחרוזת את :המשפט הפוך

"esrever gnirts ehT"

58

Shayke Bilu PhD

58

SCE-Chapter-8-Strings

Page 59: C Programming chapter 8

פונקציות לדוגמא – string.hהספריה

#include <stdio.h>

#include <string.h>

#define SIZE 81

void main()

}

char str1[SIZE],str2[SIZE],str3[SIZE];

printf("Enter str1:\n");

gets(str1); strrev(str1);

printf("Str1:%s\n",str1);

printf("Enter str2:\n");

gets(str2); strcpy(str1,str2);

printf("Str1:%s, Str2:%s\n",str1,str2);

printf("Enter str3:\n");

gets(str3); strcat(str2,str3);

printf("Str2:%s, Str3:%s\n",str2,str3);

}

59

Shayke Bilu PhD

59

SCE-Chapter-8-Strings

Page 60: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

60

Page 61: C Programming chapter 8

SCE-Chapter-8-Strings

במחרוזת תו של הראשונה ההופעה של חיפוש המבצעת פונקציה :התו של הראשון מהמופע החל המחרוזת שאר את ומציגה

char strchr(char str[ ], char ch);

הפונקציה ביצוע strchr(str,ch); של חיפוש שיבוצע לכך יגרום הפונקציה מופיע והוא במידה str. במחרוזת chשבמשתנה התו

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

ובמחרוזת במידה :לדוגמה str המשפט קיים:

"shalom dear friend"

:המחרוזת תוחזר הפונקציה ביצוע לאחר ’d‘ התו קיים ch ובמשתנה

"dear friend"

61

Shayke Bilu PhD

61

מחרוזתיותפונקציות - string.hהספריה

Page 62: C Programming chapter 8

SCE-Chapter-8-Strings

פונקציה המבצעת חיפוש של המופע האחרון של תו במחרוזת :ומציגה את שאר המחרוזת מהמופע הראשון של התו

char strrchr(char str[ ], char ch);

ביצוע הפונקציהstrrchr(str,ch); שיבוצע חיפוש של יגרום לכךבמידה והוא מופיע תוצג str.במחרוזת chהתו שבמשתנה

.המחרוזת החל מהמקום האחרון בו מופיע התו הראשון כולל התו

.המקורית לא משתנה אלא רק התצוגה שלההמחרוזת

ובמחרוזת במידה :לדוגמה str המשפט קיים:

"shalom dear friend"

:המחרוזת תוחזר הפונקציה ביצוע לאחר ’ ‘ התו קיים ch ובמשתנה

"friend"

62

Shayke Bilu PhD

62

מחרוזתיותפונקציות - string.hהספריה

Page 63: C Programming chapter 8

SCE-Chapter-8-Strings

פונקציה המבצעת חיפוש ההופעה הראשונה של מחרוזת בתוךמחרוזת אחרת ומציגה את שאר המחרוזת מהמופע הראשון של

:המחרוזת שנמצאה

char strstr(char str[ ], char find[ ]);

ביצוע הפונקציהstrstr(str,find); יגרום לכך שיבוצע חיפוש שלוהיא מופיעה במידה str.במחרוזת findהמחרוזת שבמשתנה

.findמופיעה המחרוזת בו החל מהמקום strתציג את הפונקציה

במידה ובמחרוזת : לדוגמהstr המשפט םקיי:

"shalom dear friend"

ובמשתנהfind קיימת המחרוזת"dear " לאחר ביצוע הפונקציה :תוחזר המחרוזת

"dear friend"

63

Shayke Bilu PhD

63

מחרוזתיותפונקציות - string.hהספריה

Page 64: C Programming chapter 8

SCE-Chapter-8-Strings

מסוף מחרוזת של הראשונה ההופעה של חיפוש המבצעת פונקציה הראשון המופע נמצא בו מהמקום ומקצצת המחרוזת

char strtok(char str[ ], char find[ ]);

הפונקציה ביצוע strtok(str,find); של חיפוש שיבוצע לכך יגרום והיא במידה str. המחרוזת בתוך findבמשתנה הנמצאת המחרוזת

מופיע בו המקום ועד מהסוף המחרוזת את תחזיר הפונקציה מופיעה .find המחרוזת של הראשון התו

ובמחרוזת במידה :לדוגמה str המשפט קיים:

"shalom dear friend"

ובמשתנה find המחרוזת קיימת ""lom הפונקציה ביצוע לאחר ”sha“ :המחרוזת תוחזר

64

Shayke Bilu PhD

64

מחרוזתיותפונקציות - string.hהספריה

Page 65: C Programming chapter 8

SCE-Chapter-8-Strings

המדגימה שימוש בפונקציות תוכנית65

Shayke Bilu PhD

65

#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));

Page 66: C Programming chapter 8

SCE-Chapter-8-Strings

המדגימה שימוש בפונקציות תוכנית66

Shayke Bilu PhD

66

printf("String status is: %d\n", strcmp(str1,str2));

printf(“New cat String is: %s\n", strcat(str1,str2));

printf("str1 after cat as: %d chars\n", strlen(str1));

printf("New string is: %s\n", strchr(str1,'o'));

printf("New string is: %s\n", strchr(str2,‘Z'));

printf("New string is: %s\n", strrchr(str2,‘m'));

printf("New string is: %s\n", strstr(str1,"al"));

printf("New string is: %s\n", strstr(str2,"IS"));

Page 67: C Programming chapter 8

SCE-Chapter-8-Strings

המדגימה שימוש בפונקציות תוכנית67

Shayke Bilu PhD

67

printf("Old str1 string is: \n", puts(str1));

printf("New string is: %s\n", strcpy(str1,str2));

printf("New str1 string is: \n”);

puts(str1);

printf("New str2 string is: \n”);

puts(str2);

puts(strrev(str1));

puts(strtok(str1,"on"));

}

Page 68: C Programming chapter 8

פונקציית השוואה המחזירה תשובות כמוstrcmp:

int strcoll (char str1[ ], char str2[ ])

ביצוע הפונקציה :strcoll(str1,str2);

כלומר שוות בכל תו עד , אם המחרוזות זהות 0הפונקציה מחזירה

אם המחרוזת ( 1)חיובי :0-שונה מ' אחרת מוחזר מס, ' \0'לתו

סדר , לפי סדר מילוניכלומר –לקסיקוגרפית , יותר הראשונה גדולה

. יותרקטנה אם היא ( -1)ושלילי , ASCIIהמופיע בטבלת

68

Shayke Bilu PhD

68

SCE-Chapter-8-Strings

מחרוזתיותפונקציות - string.hהספריה

Page 69: C Programming chapter 8

בכמות מוגבלת רק לראשונה שניה מחרוזת המעתיקה פונקציה

:num המשתנה י"ע הנקבעת להעתקה תאים

char strncpy(char str1[ ],char str2[ ],int num)

הפונקציה ביצוע: strncpy (str1,str2,num); שלתוך לכך יגרום

ובתוך במידה .str2 מהמחרוזת תווים num יועתקו str1 המחרוזת

.נדרסים הם תווים היו tar1 המחרוזתובמחרוזת במידה :לדוגמה str1 המשפט קיים:

" shalom dear friend " קיים num ובמשתנה "Fm is fine" המילה קיימת str2 ובמחרוזת

:המחרוזת את תכיל str1 המחרוזת הפונקציה ביצוע לאחר ,3 המספר" Fm lom dear friend "

.

69

Shayke Bilu PhD

69

SCE-Chapter-8-Strings

מחרוזתיותפונקציות - string.hהספריה

Page 70: C Programming chapter 8

מסוים בתו מחרוזת מילוי המבצעת פונקציה:

char strset(char str[],char ch);

הפונקציה ביצוע: strset(str,ch); שהמחרוזת לכך יגרום str

.ch במשתנה שנמצא בתו תתמלא

ובמחרוזת במידה :לדוגמה str המשפט קיים:

"shalom dear friend"

str המחרוזת הפונקציה ביצוע לאחר ‘@‘ התו קיים ch ובמשתנה :הבאים התווים את תכיל

“@@@@@@@@@@@@@@@@@@”

70

מחרוזתיותפונקציות - string.hהספריה

Shayke Bilu PhD

70

SCE-Chapter-8-Strings

Page 71: C Programming chapter 8

מסוים בתו מחרוזת מילוי המבצעת פונקציה n פעמים:

char strnset(char str[],char ch,int num);

הפונקציה ביצוע: strnset(str,ch,num); שהמחרוזת לכך יגרום

str במשתנה שנמצא בתו תתמלא chבמשתנה שיש בכמות num.

ובמחרוזת במידה :לדוגמה str המשפט קיים:

"shalom dear friend"

לאחר , 3 המספר קיים num ובמשתנה‘@‘ התו קיים ch ובמשתנה :הבאים התווים את תכיל str1 המחרוזת הפונקציה ביצוע

“@@@lom dear friend"

71

מחרוזתיותפונקציות - string.hהספריה

Shayke Bilu PhD

71

SCE-Chapter-8-Strings

Page 72: C Programming chapter 8

שרשור המבצעת פונקציה n מ תווים-str2 בסיום str1:

char strncat(char str1[],char str2[],int num)

הפונקציה ביצוע: strncat(str1,str2,num); לכך יגרום

במשתנה שיש בכמות תווים ישורשרו 2str המחרוזת שמתוך

num המחרוזת בסוף str1.

1 ובמחרוזת במידה :לדוגמהstr המשפט קיים:

"shalom dear "

,3 קיים num ובמשתנה"friend" המילה קיימת str2 ובמחרוזת :המחרוזת את תכיל str1 המחרוזת הפונקציה ביצוע לאחר

"shalom dear fri"

72

מחרוזתיותפונקציות - string.hהספריה

Shayke Bilu PhD

72

SCE-Chapter-8-Strings

Page 73: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

73

Page 74: C Programming chapter 8

SCE-Chapter-8-Strings

המדגימה שימוש בפונקציות תוכנית

#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;

74

Shayke Bilu PhD

74

Page 75: C Programming chapter 8

SCE-Chapter-8-Strings

המדגימה שימוש בפונקציות תוכנית

printf(“String status is: %d\n”, strcoll (str1, str2));

printf(“New string is: %s\n”, strset(str1,ch));

printf(“New string is: %s\n”, strnset(str1,ch1,num));

printf(“New string is: %s\n”, strncat(str1,str2,num));

{

75

Shayke Bilu PhD

75

Page 76: C Programming chapter 8

: לב-נקודה לתשומת

גרשיים -מחרוזת , גרש -תו בודד

כדי להתייחס לתו מסוים רושמים אותו בין גרש מימין לגרש

’a‘: למשל, משמאל

למשל, כדי להתייחס למחרוזת רושמים בתוך גרשיים כפולים :

“HELLO”

אם רושמים“a” המשמעות היא מחרוזת שיש בה את התו‘a’

.’a‘כלומר זה שונה מאשר לרשום . ’0\‘ואחריו את התו

משתמשים בפונקציות פנימיות, כשעושים פעולות על מחרוזות ,

: למשל, יש להקפיד על רישום גרשיים כפולים

strcmp(input,”a”)

ולא:

strcmp(input,’a’)

76

SCE-Chapter-8-Strings Shayke Bilu PhD

76

Page 77: C Programming chapter 8

פונקציות על תווים ctype.h הספריה

הספריהctype.h שימושית מאד כאשר מטפלים בתווים בודדים .אם הבדיקה 0מחזירות מספר שאינו כל הפונקציות בספריה זו

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

בכל מקום בו נרשםch ניתן לרשום גם תו מתוך מחרוזת :str[i] .charהוגדר כמערך מחרוזתי strבמידה כמובן שהמשתנה

בכחול כל הפונקציות נכתבות בתוכנית ללא הטיפוסים!!!

אות קטנההבודקת האם במשתנה תווי יש הגדרת פונקציה:

int islower(char ch);

אות גדולההבודקת האם במשתנה תווי יש הגדרת פונקציה:

int isupper(char ch);

77

Shayke Bilu PhD

77

SCE-Chapter-8-Strings

Page 78: C Programming chapter 8

פונקציות על תווים ctype.h הספריה

סיפרההגדרת פונקציה הבודקת האם במשתנה תווי יש:

int isdigit(char ch);

אלפא נומריהבודקת האם במשתנה תווי יש ערך הגדרת פונקציה:

int isalnum(char ch);

אלפא בתיהבודקת האם במשתנה תווי יש ערך הגדרת פונקציה:

int isalpha(char ch);

רווחהבודקת האם במשתנה תווי יש הגדרת פונקציה :

int isspace(char ch);

78

Shayke Bilu PhD

78

SCE-Chapter-8-Strings

Page 79: C Programming chapter 8

מבצעותהפונקציות הבאות למשל:

הפיכת אות גדולה לקטנה char tolower(char ch);

הפיכת אות קטנה לגדולהchar toupper(char ch);

אםtolower וכך , לא מקבלת אות גדולה אז היא לא משנה אותה

.לא מקבלת אות קטנה toupperגם אם

שולפים מתוך המחרוזת , זה שימושי כאשר שעובדים עם מחרוזות

.תו ורוצים לבדוק להפוך אותו לאות גדולה או קטנה לפי הצורך

79

Shayke Bilu PhD

79

SCE-Chapter-8-Strings

פונקציות על תווים ctype.h הספריה

Page 80: C Programming chapter 8

Shayke Bilu PhD

80

תרגיל כיתה

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .1

לתוכו קלוט .char מטיפוס 30 בגודל מחרוזתי מערך תגדיר•

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

.שנקלטה המקורית המחרוזת אורך מה ותציג תמצא•

.גיבוי למחרוזת המחרוזת את תעתיק•

גדולות אותיות כמה תמצא ,במחרוזת קטנות אותיות כמה תמצא•

.שונים תווים וכמה במחרוזת ספרות כמה תמצא ,המחרוזת

האותיות כל ואת לגדולות הקטנות האותיות כל את תחליף•

.לקטנות הגדולות

.והגיבוי המקורית ,המחרוזות שתי את תציג•

SCE-Chapter-8-Strings

Page 81: C Programming chapter 8

Shayke Bilu PhD

81

תרגילי כיתה

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .2

.char מטיפוס 10 בגודל מחרוזתי מערך תגדיר•

.מחרוזתי למערך תווים 10 לקליטת פונקציה ותפעיל תגדיר•

הם במחרוזת התווים כל כי הבודקת פונקציה ותפעיל תגדיר•

הפונקציות לשתי נמשיך חיובית התשובה אם רק ,אותיות

.הבאות

טבלת פי על) ביותר הגדול התו למציאת פונקציה ותפעיל תגדיר•

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

טבלת פי על) ביותר הקטן התו למציאת פונקציה ותפעיל תגדיר•

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

SCE-Chapter-8-Strings

Page 82: C Programming chapter 8

Shayke Bilu PhD

82

תרגילי כיתה

:הבאות המשימות את המבצעת תוכנית כתוב .3

.char מטיפוס 10 בגודל מחרוזתיים מערכים שלושה תגדיר•

.הראשון למערך תווים 10 לקליטת פונקציה ותפעיל תגדיר•

אותיות שהם התווים כל למציאת פונקציה ותפעיל תגדיר•

.השני למערך אותם ותעתיק הראשון במערך גדולות

אותיות שהם התווים כל למציאת פונקציה ותפעיל תגדיר•

.השלישי למערך אותם ותעתיק הראשון במערך קטנות

לאחר המערכים שלושת את המדפיסה פונקציה ותפעיל תגדיר•

.הקודמות הפונקציות בשתי שנעשו השינויים

SCE-Chapter-8-Strings

Page 83: C Programming chapter 8

Shayke Bilu PhD

83

תרגילי כיתה

,מהמשתמש תווים של מחרוזת קולטת אשר תוכנית כתוב .4

,נוספת עזר במחרוזת שימוש ללא ,להתחלה מהסוף ,אותה והופכת

.()strrev ללא כלומר

מהתו יתחיל האחד .בלולאה אינדקסים בשני להשתמש יש :רמז

שבתא נזכור) .האחרון מהתו יתחיל והשני ,במחרוזת הראשון

.('\0' יש האחרון

.קלט ממחרוזת רווחים למחוק שתפקידה תוכנית לכתוב יש .5

לא וכן במידה ,רווח הוא האם תו קליטת לאחר תבדוק התוכנית

ניתן .במערך תשבצו מרווח שונה והוא במידה במערך אותו תשבץ

.בלבד תווים 15 הוא המחרוזת אורך כי להניח

SCE-Chapter-8-Strings

Page 84: C Programming chapter 8

Shayke Bilu PhD

84

תרגילי כיתה

:בשם פונקציה ומפעילה המגדירה תוכנית כתוב .6

strlen_without_ch ,את ובודקת עוברת ,תווים מחרוזת המקבלת

התווים מספר את ותדפיס תספור הפונקציה ,המחרוזת תווים

.’F‘ או 'f' האות שאינם במחרוזת

:בשם פונקציה ומפעילה המגדירה תוכנית כתוב .7

strcpy_without_ch ,העתקה ,לשנייה אחת מחרוזת המעתיקה

.’B‘ או ’b‘ אינם המועתקים התווים עוד כל תו אחרי תו מתבצעת

.שהתקבלה החדשה המחרוזת את הפונקציה תדפיס בסיום

SCE-Chapter-8-Strings

Page 85: C Programming chapter 8

ומחרוזותממדים מערכים דו

G a d i \0

R a m i \0

D a n i \0

85

. שיכיל שמותממדי נגדיר מערך דו

:זה כל שורה במערך תהיה מחרוזת לצורך

char names[N][STR_SIZE];

STR_SIZE ? #define N 3-ו Nהערכים של מהם

#define STR_SIZE 5

Shayke Bilu PhD

85

SCE-Chapter-8-Strings

Page 86: C Programming chapter 8

פונקציה למציאת –ממדים ומחרוזות מערכים דו

מחרוזת במערך דו ממדי86

. להלן פונקציה המקבלת מילה ומערך

:"*****"הוא יוחלף במילה במערך נמצא אם השם

void markName(char Names[ ][STR_SIZE],int size, char word[ ])

{

int i;

for ( i = 0; i < size; i++ )

if (strcmp(Names[i],word)==0)//השוואה בין המחרוזת למילה

{

strcpy(Names[i],“*****"); // המילה שנמצאההחלפת

return 0;

}

}

Shayke Bilu PhD

86

SCE-Chapter-8-Strings

Page 87: C Programming chapter 8

פונקציה למציאת –ממדים ומחרוזות מערכים דו

מחרוזת במערך דו ממדי87

. להלן פונקציה המקבלת מילה ומערך

:"!!!Found"י המילה "הוא יסומן עבמערך נמצא אם השם

void markName(char Names[ ][STR_SIZE],int size, char word[ ])

{

int i;

for ( i = 0; i < size; i++ )

if (strcmp(Names[i],word)==0)//השוואה בין המחרוזת למילה

{

strcat(Names[i],"Found!!!”);// סימון המילה שנמצאה

return 0;

}

}

Shayke Bilu PhD

87

SCE-Chapter-8-Strings

Page 88: C Programming chapter 8

תוכנית הכוללת מימוש חיפוש מחרוזת מילה

במערך דו ממדי נתון88

#include <stdio.h>

#include <string.h>

#define ROW 10

#define COL 30

#define WORDSIZE 10

int markName(char Names[][COL], char name[ ])

{

int i;

for ( i = 0; i < ROW; i++ )

if (strcmp(Names[i],name)==0)

strcat(Names[i],“\t<-Found it!!!");

return 0;

}

Shayke Bilu PhD

88

SCE-Chapter-8-Strings

Page 89: C Programming chapter 8

89

int main()

}

int i;

char Names[ROW][COL]={{"Ravit"}, {"Danit"}, {"Rotem"},

{"Daniel"}, {"Galit"}, {"Reot"},

{"Daniela"}, {"Victoria"}, {"Rita"},

{"Gavriela"}};

char name[WORDSIZE]="Reot";

markName(Names,name);

for(i=0; i<ROW;i++)

puts(Names[i]);

{

התוכנית הראשית

Shayke Bilu PhD

89

SCE-Chapter-8-Strings

Page 90: C Programming chapter 8

מימוש חיפוש מחרוזת –ממדים ומחרוזות דו מערכים

במערך דו ממדי90

#include <stdio.h>

#define ROW 5

#define COL 6

#define WORDSIZE 4

void main()

}

char matr[ROW][COL]={{'r','v','o','q','w',’\0’},{'a','h','s','x','l',’\0’},

{'n','k','s','d','m’,’\0’}, {'r','a','n','j','r',’\0’}, {'d','k','u','c','a',’\0’}};

char word[WORDSIZE]={‘r’,’a’,’n’,’\0’};

int i,j,k,l;

Shayke Bilu PhD

90

SCE-Chapter-8-Strings

Page 91: C Programming chapter 8

SCE-Chapter-8-Strings

91

//Search for horizontal words (along the columns):

for(i=0; i<ROW; i++) //Scan the rows.

for(j=0; j<=COL-WORDSIZE; j++) //Scan the columns.

{

for(k=j, l=0; l<=WORDSIZE && matr[i][k]==word[l]; k++, l++);

if(l==WORDSIZE-1) //Check if the whole word was encountered.

printf("The word was found horizontally!!! \nIts

coordinates are: i=%d,j=%d,i=%d,j=%d\n", i, WORDSIZE,i,k);

{

מימוש חיפוש מחרוזת –ממדים ומחרוזות דו מערכים

במערך דו ממדי91

Shayke Bilu PhD

Page 92: C Programming chapter 8

92

//Search for vertical words (along the columns):

for(i=0; i<COL; i++) //Scan the columns:

for(j=0; j<=ROW-WORDSIZE; j++) //Scan the rows:

}

for(k=j, l=0;l<=WORDSIZE && matr[k][i]==word[l];k++, l++);

if(l==WORDSIZE-1)

printf("The word was found vertically!!! \nIts coordinates are:

i=%d,j=%d,i=%d,j=%d\n", WORDSIZE-k-1,i,k,i);

{

}

מימוש חיפוש מחרוזת –ממדים ומחרוזות דו מערכים

במערך דו ממדי

Shayke Bilu PhD

92

SCE-Chapter-8-Strings

Page 93: C Programming chapter 8

SCE-Chapter-8-Strings

סיכום

הגדרת מחרוזת.

אתחול מחרוזת וסימון סוף מחרוזת.

פלט של מחרוזות/קלט.

מחרוזותפעולות על.

מציאת אורך מחרוזת.

איתור תו במחרוזת.

פונקציות פנימיות על מחרוזות.

פונקציות פנימיות על תווים.

מערכים דו ממדיים ומחרוזות.

93

Shayke Bilu PhD

93

Page 94: C Programming chapter 8

SCE-Chapter-8-Strings

?שאלות

Shayke Bilu PhD

94

Page 95: C Programming chapter 8

Shayke Bilu PhD

95

מחרוזות דו ממד –תרגיל כיתה

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .8

.char מטיפוס 10X5 בגודל מחרוזתי ממדי דו מערך תגדיר•

.אותו ותדפיס ממדי הדו למערך תווים 9 בנות מילים 5 תקלוט•

.נוסף מחרוזתי למשתנה נוספת תווים 9 בת מילה תקלוט•

שורה באיזו ותציג במערך בנפרד שנקלטה המילה את תחפש•

הודעה תודפס נמצאת לא המילה אם ,במערך נמצאת היא

.מתאימה

@ תווי באוסף אותה להחליף יש במערך נמצאה והמילה במידה•

.שהוחלפה המילה בגודל

.העבודה בסיום ממדי הדו המערך את הדפס•

SCE-Chapter-8-Strings

Page 96: C Programming chapter 8

Shayke Bilu PhD

96

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .9

.char מטיפוס 30X10 בגודל מחרוזתי ממדי דו מערך תגדיר•

.אותו ותדפיס ממדי הדו למערך מילים 10 תקלוט•

ובאיזו למערך שנקלטה ביותר הארוכה המילה מהי ותציג תמצא•

.נמצאת היא שורה

בשורה למילה זהה הראשונה בשורה המילה האם תחפש•

.החמישית

שבשורה המילה עם שנייה בשורה המילה את תשרשר•

.השרשור את ותדפיס השלישית

SCE-Chapter-8-Strings

מחרוזות דו ממד –תרגיל כיתה

Page 97: C Programming chapter 8

Shayke Bilu PhD

97

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .10

.char מטיפוס 20X10 בגודל מחרוזתי ממדי דו מערך תגדיר•

.אותו ותדפיס ממדי הדו למערך משפטים 10 תקלוט•

הקטנות האותיות מספר את בו שיש המשפט מהו ותציג תמצא•

.במערך ביותר הגדול

אות תהיה שלו הראשונה שהאות כך שורה בכל משפט כל תשנה•

.קטנות האותיות שאר וכל גדולה

גדול האותיות מספר שבו במערך המשפט מהו ותציג תחפש•

.במשפט אחרים תווים או הרווחים ללא ביותר

SCE-Chapter-8-Strings

מחרוזות דו ממד –תרגיל כיתה

Page 98: C Programming chapter 8

Shayke Bilu PhD

98

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .11

.char מטיפוס 20X10 בגודל מחרוזתי ממדי דו מערך תגדיר•

.אותו ותדפיס ממדי הדו למערך משפטים 10 תקלוט•

במשפט אותו ותחליף במערך ביותר הארוך המשפט מהו תמצא•

Max String.

במשפט אותו ותחליף במערך ביותר הקצר המשפט מהו תמצא•

Min String.

.מיקומו ואת אותו ותדפיס אותיות רק יש בו המשפט את תמצא•

את ותדפיס מקסימלי ספרות מספר בו המשפט את תמצא•

.מיקומוSCE-Chapter-8-Strings

מחרוזות דו ממד –תרגיל כיתה

Page 99: C Programming chapter 8

Shayke Bilu PhD

99

:הבאות המשימות את ומבצעת המגדירה תוכנית כתוב .12

מטיפוס 10X5 בגודל מחרוזתיים ממדים דו מערכים שני תגדיר•

char אחד כל.

.אותו ותדפיס הראשון ממדי הדו למערך משפטים 5 תקלוט•

.אותו ותדפיס השני ממדי הדו למערך משפטים 5 תקלוט•

למציאת המשפטים שני בין מקבילה מילה כל של בדיקה תבצע•

.מוחלטת זהות

המערכים משני המילים שתי כי לציין יש זהות ונמצאה במידה•

מתאימה הודעה לתת יש זהות נמצאה ולא במידה ,זהות

.הזהות נמצאה לא מילים ובאיזה מדובר שורה באיזו המציינת

SCE-Chapter-8-Strings

מחרוזות דו ממד –תרגיל כיתה