סיכום: שרשור מחרוזות דינמי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 אונליין