Menu
Coddy logo textTech

סיכום: שרשור מחרוזות דינמי

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 61 מתוך 63.

challenge icon

אתגר

קל

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

  1. לכתוב פונקציה בשם concatenateStrings ש:
    • מקבלת שני פרמטרים מסוג char* בשם str1 ו-str2
    • מחזירה char* שמצביע למחרוזת שהוקצתה באופן דינמי
    • מחשבת את כמות הזיכרון הכוללת הדרושה עבור שתי המחרוזות, בתוספת תו הסיום null
    • משתמשת ב-malloc() כדי להקצות את כמות הזיכרון המדויקת הנדרשת
    • בודקת אם הקצאת הזיכרון הצליחה (מחזירה NULL אם ההקצאה נכשלת)
    • משתמשת ב-strcpy() כדי להעתיק את המחרוזת הראשונה אל הזיכרון שהוקצה
    • משתמשת ב-strcat() כדי לצרף את המחרוזת השנייה לתוצאה
    • מחזירה את המצביע למחרוזת המשורשרת החדשה שנוצרה
  2. לכתוב פונקציה בשם processText ש:
    • מקבלת שלושה פרמטרים מסוג char*: word1,‏ word2 ו-separator
    • מחזירה char* שמצביע למחרוזת שהוקצתה באופן דינמי
    • יוצרת מחרוזת משולבת בתבנית: word1 + separator + word2
    • קוראת תחילה ל-concatenateStrings כדי לשלב את word1 ואת separator
    • לאחר מכן קוראת שוב ל-concatenateStrings כדי לצרף את word2 לתוצאה
    • משחררת כראוי כל הקצאת זיכרון זמנית
    • מחזירה את התוצאה הסופית של השרשור
  3. בפונקציה הראשית:
    • להכריז על שלושה מערכי תווים, שכל אחד מהם בגודל 50: firstWord,‏ secondWord ו-connector
    • לקרוא מהקלט שלוש מחרוזות שמייצגות את המילה הראשונה, המילה השנייה והמחבר
    • לקרוא לפונקציה processText עם שלוש המחרוזות האלה
    • לבדוק שהמצביע שהוחזר אינו NULL
    • אם הפעולה הצליחה, להדפיס את התוצאה בדיוק בתבנית הזו: Result: [concatenated_string]
    • אם הקצאת הזיכרון נכשלה, להדפיס: Memory allocation failed
    • לחשב ולהדפיס את אורך מחרוזת התוצאה בדיוק בתבנית הזו: Length: [length]
    • לשחרר את הזיכרון שהוקצה באופן דינמי

האתגר הזה בוחן את השליטה שלכם בהקצאת זיכרון דינמית, בפונקציות לעיבוד מחרוזות, בערכי החזרה של מצביעים ובניהול זיכרון תקין. תתרגלו חישוב דרישות הזיכרון, שימוש ב-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;
}

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

תרגלו בעצמכם: קומפיילר C אונליין