Menu
CoddyTech

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

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