עבור לתוכן

פירוק הקלט ושימוש ב strtok

Featured Replies

פורסם

הסתכלתי קצת בפורום... אני לא בטוח שהבנתי.

קיבלתי קלט מהמשתמש, ואני מעוניין לפרק אותו.

עדיף לי להכניס את הקלט לתוך מערך של char או ישירות לchar?

ואיך בדיוק אני מפרק אותו לחלקים?

לגבי ה strtok הפקודה הזאת בעצם מתעלמת ממה שאני רשום לה? כלומר

strtok (command,","); bla bla

בהנחה של command זה הקלט.

תודה על עזרה

פורסם

עדיף לי להכניס את הקלט לתוך מערך של char או ישירות לchar?

מה זאת אומרת? char יכול להחזיק רק תו אחד, מערך של char יכול להחזיק הרבה תווים.

הדרך הכי פשוטה היא אכן להשתמש ב-strtok. יש כאן הסבר על איך להשתמש בה כולל דוגמה. אתה מוזמן לנסות להשתמש בה בעצמך בתכנית ניסיון כדי לראות מה היא עושה בדיוק.

לא הבנתי את השאלה האחרונה שלך. למה שהיא תתעלם מהקלט?

נ.ב. בשביל לכתוב קוד בתוך הפורום, תשתמש בטג קוד (ליד הכפתור של ציטוט).

פורסם
  • מחבר

הסתכלתי כבר על הדוגמא הזאת, בגלל זה אני שואל כי אם תשים לב הם שמו את המחרוזת במערך

char str[]

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

פורסם

אתה יכול להעתיק מחרוזות באמצעות strcpy (קרא על הפונקציה באותו אתר).

פורסם
  • מחבר

אני אהיה יותר ברור,

הקלט שאני מקבל מהמשתמש אמור להיות

read_set A,12,2,3,4,5,6

ואני מעונין לשמור את המילה הראשונה במשתנה אחר.

char temp[]=("%s/n",command)

האם זאת הדרך?

פורסם

מה אמור להביע הקוד שכתבת? זה אפילו לא מתקמפל.

קראת על strtok - תשתמש בה. את התוצאה של strtok אתה יכול לשמור במשתנה.

פורסם
  • מחבר

מה עושה השורת קוד הזאת?

pch = strtok (str," ,.-");

פורסם

מה עושה השורת קוד הזאת?

pch = strtok (str," ,.-");

השורה הזאת מבצעת את הדברים הבאים.

1. מוצא את התו הראשון במחרוזת str שאיננו מהתוים "-., " שומר את כתובתו במשתנה p

2. ממשיך לסרוק את המחרוזת str עד למציאת אחד מן התווים שבארגומנט השני "-., "

3. כותבת לתוך המחרוזת str את התו '0\' במקום שהיא מצאה ב(2) שומר פנימית את הכתובת הזאת על מנת להמשיך לעשות parsing למחרוזת אבל עם פרמטר ראשון NULL

4. מחזירה את התוצאה מ1 ושומרת אותו במשתנה pch

ככלל, אל תשתמש בstrtok

הפונקציה הזאת חייבת לעבוד עם מחרוזות שאפשר לכתוב עליהן (היא כותבת את תו האפס בכל קריאה שלה) אם תקרא לה עם literal string התוכנית שלך עלולה לעוף.

אי אפשר לקרוא לפונקציה הזאת משני נימים (ת'רדים) שונים בתוכנית כי עלולות להיות התנגשויות בגלל הערך הפנימי שנשמר בכל קריאה ואם יישמר משני נימים שונים התוצאות יהיו שגויות

פורסם

מה עושה השורת קוד הזאת?

pch = strtok (str," ,.-");

אני מבין אז שלא קראת את התיעוד שנתתי לך, אלא רק הסתכלת על הדוגמא.

הפונקציה הזאת חייבת לעבוד עם מחרוזות שאפשר לכתוב עליהן (היא כותבת את תו האפס בכל קריאה שלה) אם תקרא לה עם literal string התוכנית שלך עלולה לעוף.

אי אפשר לקרוא לפונקציה הזאת משני נימים (ת'רדים) שונים בתוכנית כי עלולות להיות התנגשויות בגלל הערך הפנימי שנשמר בכל קריאה ואם יישמר משני נימים שונים התוצאות יהיו שגויות

בעיקרון אתה צודק, אבל:

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

ב. נכון, אבל בשביל תרגיל בסיסי ב-C זה בסדר. כשהוא יצטרך להתמודד עם ריבוי נימים הוא יוכל להשתמש בגרסה הבטוחה strtok_s.

פורסם
  • מחבר

תודה על ההסבר המעולה! בכל מקרה אם מישהו בעתיד יכנס לפוסט הזה אני ממליץ לו להסתכל פה:

http://www.cplusplus.com/faq/sequences/strings/strtok/

זה מוסבר מעולה

פורסם
  • מחבר

בכדי להוציא מזה את המספר עלי להשתמש ב atoi כדי להפוך אותו מ char ל int נכון?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים