שאלה לגבי strstr בשפת C

  • פותח הנושא Suli
  • פורסם בתאריך

Suli

New member
שאלה לגבי strstr בשפת C

איך אני גורם לפונקציה הזאת לסרוק "ערך שלם" של התנאי במחרוזת המקור?
או אם להיות יותר מדוייק,

איך אני גורם לפונקציה כשהיא מקבלת את המשפט (לדוגמה)
This is a nice day
להדפיס
is a nice day
ולא
is is a nice day
?

תודה מראש
 

BravoMan

Active member
במקרה הספציפי שהצגת, תצטרך לחפש

את המילה is עם תו רווח לפניה, ואז להתחיל בהדפסה תו אחד האחרי הכתובת ש-strstr החזירה לך.

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

Suli

New member
הבנתי

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

או שיש קומבינה אחרת?
 

BravoMan

Active member
כן, תצטרך להדביק, אבל שים לב שיש פה קאצ':

אם המילה שאתה מחפש נמצאת בתחילת המחרוזת, למשל, אתה מחפש is במשפט:

is this good

הוספת הרווח בתחילת מילה תגרום לכך ש-strstr תחזיר NULL, כי היא לא מצאה שום דבר.
אם תוסיף רווח בסוף המילה, זה יעבוד, אבל במשפט כזה:

yes, this is good

תקבל תוצאה שגויה (כי ה-is הראשון שימצא יהיה חלק מ-this).

אני לא יודע מה אתה מנסה לעשות, אבל נשמע ש-strstr היא לא הפתרון הנכון לכך...
 

Suli

New member
זה מה שאני צריך לעשות

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

BravoMan

Active member
אז המתרגל רוצה שתתאמץ קצת


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

ככה גם תשתמש ב-ponter מטייל, גם תשתמש ב-strstr (אפילו שהיא לא הכי מתאימה לזה), וגם תקבל באמת מילה ולא חתיכה ממילה.

מקווה שהסברתי את עצמי בצורה ברורה...
 
למעלה