Menu
Coddy logo textTech

שימוש ב־strcmp()

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

למדת איך לחבר מחרוזות באמצעות strcat(), אבל מה אם צריך לקבוע אם שתי מחרוזות מכילות בדיוק את אותו טקסט? ב-C אי אפשר להשתמש באופרטור השוויון (==) כדי להשוות מחרוזות, כי הוא משווה רק כתובות זיכרון ולא את התוכן עצמו.

הפונקציה strcmp() מהספרייה <string.h> פותרת את הבעיה הזאת באמצעות השוואה בין שתי מחרוזות תו אחר תו. היא מבצעת את מה שנקרא השוואה לקסיקוגרפית — כלומר, משווה בין מחרוזות לפי סדר מילוני.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // מחזירה 0 (המחרוזות שוות)

הפונקציה strcmp() מחזירה שלושה סוגי ערכים שונים: היא מחזירה 0 אם המחרוזות זהות, ערך שלילי אם המחרוזת הראשונה מופיעה לפני השנייה בסדר האלפביתי, וערך חיובי אם המחרוזת הראשונה מופיעה אחרי השנייה בסדר האלפביתי.

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

challenge icon

אתגר

קל

כתבו תוכנית C שמממשת מערכת פשוטה לאימות סיסמה באמצעות הפונקציה strcmp(). התוכנית צריכה:

  1. לקרוא מספר שלם n שמייצג את מספר ניסיונות הכניסה שיש לעבד
  2. עבור כל ניסיון כניסה:
    • לקרוא שם משתמש מהקלט
    • לקרוא סיסמה מהקלט
    • להשתמש ב-strcmp() כדי להשוות את שם המשתמש ל-"admin"
    • להשתמש ב-strcmp() כדי להשוות את הסיסמה ל-"secret123"
    • להדפיס את ההודעה המתאימה על סמך תוצאות ההשוואה
  3. לאחר עיבוד כל הניסיונות, לספור ולהציג כמה כניסות מוצלחות התרחשו

לוגיקת אימות הכניסה צריכה להיות:

  • אם גם שם המשתמש וגם הסיסמה נכונים: להדפיס "Login successful"
  • אם שם המשתמש נכון אך הסיסמה שגויה: להדפיס "Invalid password"
  • אם שם המשתמש שגוי אך הסיסמה נכונה: להדפיס "Invalid username"
  • אם גם שם המשתמש וגם הסיסמה שגויים: להדפיס "Invalid credentials"

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

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

[Login result message]
[Login result message]
...
Total successful logins: [count]

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

4
admin
secret123
user
password
admin
wrong
guest
secret123

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

Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1

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

נסו בעצמכם

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: כתבו כאן את הקוד שלכם
    // עבדו כל ניסיון התחברות באמצעות הפונקציה strcmp()
    // השוו את username ל-"admin" ואת password ל-"secret123"
    // הדפיסו הודעות מתאימות וספרו את ההתחברויות המוצלחות
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconבחנו את עצמכם

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

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

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