שימוש ב־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"הפונקציה הזו חיונית לבניית מחרוזות ארוכות יותר מחלקים קטנים יותר, למשל ליצירת משפטים שלמים ממילים בודדות או לשילוב קלט של משתמש עם טקסט מוגדר מראש.
אתגר
קלכתבו תוכנית C שמדגימה שרשור מחרוזות באמצעות הפונקציה strcat() כדי ליצור הודעות אישיות. התוכנית שלכם צריכה:
- לקרוא מספר שלם
nשמייצג את מספר האנשים שיש לעבד - עבור כל אדם:
- לקרוא את השם הפרטי שלו מהקלט
- לקרוא את שם המשפחה שלו מהקלט
- ליצור מערך תווים בשם
fullNameובו 100 איברים - להשתמש ב-
strcpy()כדי להעתיק את השם הפרטי לתוךfullName - להשתמש ב-
strcat()כדי להוסיף רווח יחיד " " ל-fullName - להשתמש ב-
strcat()כדי להוסיף את שם המשפחה ל-fullName - ליצור מערך תווים בשם
greetingובו 150 איברים - להשתמש ב-
strcpy()כדי להעתיק את "Hello, " לתוךgreeting - להשתמש ב-
strcat()כדי להוסיף אתfullNameל-greeting - להשתמש ב-
strcat()כדי להוסיף את "! Welcome to our program." ל-greeting - להדפיס את הודעת הברכה הסופית
- לאחר עיבוד כל האנשים, ליצור הודעת סיכום:
- ליצור מערך תווים בשם
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;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין