סיכום: שרשור מחרוזות דינמי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 61 מתוך 63.
אתגר
קלכתבו תוכנית ב־C שמממשת פונקציה לשרשור דינמי של מחרוזות כדי ליצור כלי לעיבוד טקסט. על התוכנית שלכם:
- לכתוב פונקציה בשם
concatenateStringsש:- מקבלת שני פרמטרים מסוג
char*בשםstr1ו־str2 - מחזירה
char*שמצביע למחרוזת שהוקצתה באופן דינמי - מחשבת את כמות הזיכרון הכוללת הדרושה לשתי המחרוזות, כולל התו המסיים null
- משתמשת ב־
malloc()כדי להקצות את כמות הזיכרון המדויקת הדרושה - בודקת אם הקצאת הזיכרון הצליחה (מחזירה NULL אם ההקצאה נכשלת)
- משתמשת ב־
strcpy()כדי להעתיק את המחרוזת הראשונה לזיכרון שהוקצה - משתמשת ב־
strcat()כדי להוסיף את המחרוזת השנייה לתוצאה - מחזירה את המצביע למחרוזת המשורשרת החדשה שנוצרה
- מקבלת שני פרמטרים מסוג
- לכתוב פונקציה בשם
processTextש:- מקבלת שלושה פרמטרים מסוג
char*:word1,word2ו־separator - מחזירה
char*שמצביע למחרוזת שהוקצתה באופן דינמי - יוצרת מחרוזת משולבת בפורמט: word1 + separator + word2
- קוראת תחילה ל־
concatenateStringsכדי לשרשר אתword1ואתseparator - לאחר מכן קוראת שוב ל־
concatenateStringsכדי להוסיף אתword2לתוצאה - משחררת כראוי את כל הקצאות הזיכרון הזמניות
- מחזירה את התוצאה המשורשרת הסופית
- מקבלת שלושה פרמטרים מסוג
- בפונקציה הראשית:
- להצהיר על שלושה מערכי תווים בגודל 50 כל אחד:
firstWord,secondWordו־connector - לקרוא מהקלט שלוש מחרוזות המייצגות את המילה הראשונה, המילה השנייה ואת המחבר
- לקרוא לפונקציה
processTextעם שלוש המחרוזות האלה - לבדוק אם המצביע שהוחזר אינו NULL
- אם הפעולה הצליחה, להדפיס את התוצאה בפורמט המדויק הזה:
Result: [concatenated_string] - אם הקצאת הזיכרון נכשלה, להדפיס:
Memory allocation failed - לחשב ולהדפיס את אורך מחרוזת התוצאה בפורמט המדויק הזה:
Length: [length] - לשחרר את הזיכרון שהוקצה באופן דינמי
- להצהיר על שלושה מערכי תווים בגודל 50 כל אחד:
האתגר הזה בוחן את השליטה שלכם בהקצאת זיכרון דינמית, בפונקציות לעיבוד מחרוזות, בערכי מצביע המוחזרים מפונקציות ובניהול זיכרון תקין. תתרגלו חישוב דרישות הזיכרון, שימוש ב־malloc() וב־free(), עבודה עם כמה פונקציות מחרוזת וטיפול בכשלים בהקצאת זיכרון. האתגר מדגים כיצד הקצאה דינמית מאפשרת לפונקציות ליצור ולהחזיר נתונים שנשארים קיימים גם לאחר שהיקף הפעולה שלהן מסתיים.
נסו בעצמכם
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: כתבו כאן את הפונקציה concatenateStrings
// TODO: כתבו כאן את הפונקציה processText
int main() {
// קראו את הקלט
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: כתבו את הקוד שלכם למטה
// קראו לפונקציה processText וטפלו בתוצאה
return 0;
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין