Menu
Coddy logo textTech

שימוש ב־strcat()

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

למדת איך להעתיק מחרוזות באמצעות strcpy(), אבל מה אם תרצה לחבר שתי מחרוזות יחד? זה נקרא שרשור, ו-C מספקת לשם כך את הפונקציה strcat() מהספרייה <string.h>.

הפונקציה strcat() מוסיפה את תוכנה של מחרוזת אחת לסוף של מחרוזת אחרת. היא מקבלת שני ארגומנטים: מחרוזת היעד (שתשתנה) ומחרוזת המקור (שתתווסף לסוף).

#include <stdio.h>
#include <string.h>

char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);  // greeting מכיל כעת "Hello World"

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

לפעמים צריך לשרשר מספר (כמו int) למחרוזת. מכיוון ש־strcat() פועלת רק עם מערכי תווים, צריך קודם להמיר את המספר למחרוזת. אפשר לעשות זאת באמצעות sprintf(), שפועלת בדיוק כמו printf(), אבל כותבת את התוצאה המעוצבת למערך תווים במקום להדפיס אותה למסך. sprintf() היא חלק מ־<stdio.h>, שכבר כלולה ברוב תוכניות C.

int n = 42;
char numStr[20];
sprintf(numStr, "%d", n);  // numStr מכיל כעת את "42" כמחרוזת

לאחר שהמספר נשמר כמחרוזת ב־numStr, אפשר להשתמש ב־strcat() כדי לצרף אותו למחרוזת אחרת כרגיל:

char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr);  // summary מכיל כעת "Total people processed: 3"

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

challenge icon

אתגר

קל

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

  1. לקרוא מספר שלם n שמייצג את מספר האנשים שיש לעבד
  2. עבור כל אדם:
    • לקרוא את השם הפרטי שלו מהקלט
    • לקרוא את שם המשפחה שלו מהקלט
    • ליצור מערך תווים בשם fullName ובו 100 איברים
    • להשתמש ב-strcpy() כדי להעתיק את השם הפרטי לתוך fullName
    • להשתמש ב-strcat() כדי להוסיף רווח יחיד " " ל-fullName
    • להשתמש ב-strcat() כדי להוסיף את שם המשפחה ל-fullName
    • ליצור מערך תווים בשם greeting ובו 150 איברים
    • להשתמש ב-strcpy() כדי להעתיק את "Hello, " לתוך greeting
    • להשתמש ב-strcat() כדי להוסיף את fullName ל-greeting
    • להשתמש ב-strcat() כדי להוסיף את "! Welcome to our program." ל-greeting
    • להדפיס את הודעת הברכה הסופית
  3. לאחר עיבוד כל האנשים, ליצור הודעת סיכום:
    • ליצור מערך תווים בשם summary ובו 100 איברים
    • להשתמש ב-strcpy() כדי להעתיק את "Total people processed: " לתוך summary
    • להמיר את המספר n למחרוזת ולהשתמש ב-strcat() כדי להוסיף אותה ל-summary
    • להדפיס את הודעת הסיכום

זכרו לכלול את הכותרת <string.h> כדי להשתמש בפונקציות המחרוזת.

הפלט שלכם צריך להציג את התוצאות בפורמט הבא:

Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]

לדוגמה, אם הקלט הוא:

2
John
Doe
Alice
Smith

הפלט שלכם צריך להיות:

Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2

האתגר הזה בודק את הבנתכם בשימוש ב-strcat() כדי לשרשר כמה מחרוזות, בשילוב עם strcpy() לאתחול המחרוזת, ובבניית מחרוזות מורכבות מכמה רכיבים, שלב אחר שלב.

נסו בעצמכם

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    // קראו את מספר האנשים
    int n;
    scanf("%d", &n);
    
    // TODO: כתבו את הקוד שלכם למטה
    // עבדו את הנתונים של כל אדם וצרו הודעות ברכה
    // לאחר מכן צרו והציגו את הודעת הסיכום
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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