שאלה על strtok

שאלה על strtok

איך משתמשים בדיוק בפונקציה הזאת כשרוצים לקבל מהמשתמש מחרוזת של מספרים אבל בתור תווים.....כשהדבר שמפריד ביניהם זה רק רווחים או טאבים..
וצריך להפריד בין המספרים....כמובן שגם צריך לעשות בדיקת קלט שהמשתמש לא יוכל להקליד תווים אחרים מלבד מספרים רווחים או טאבים אחרת יודפס לו הודעת שגיאה ועליו לנסות שוב....
למשל המחרוזת הזו : "38678395 57583957 889 432 5748"

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

nocgod

New member
לא בדיוק מבין את האיסור להשתמש במצביע

כשאתה משתמש בstrtok.
כדי לעשות בדיקה שהמשתמש נחמד ומכניס קלט תקין ->strtok לא יעזור לך כל כך לדעתי, אולי אם איזה קומבינה גאונית. תצטרך לעבור תו-תו ולראות שהוא הכניס קלט תקין (לולאת for)
אחרי שיש לך קלט תקין אתה משתמש בstrtok שמחזיר לך (תחזיק חזק) מצביע(אתה הכתובת) של ההתחלת המחרוזת הבאה אחרי הdelimiter האחרון.
http://www.cplusplus.com/reference/cstring/strtok/
יש פה הסבר על הפקודה ודוגמא של איך משתמשים בה.
תהנה...
 
אז כנראה שלא אוכל להשתמש בפונקציה הזו

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

BravoMan

Active member
אז מה הכוונה בדיוק:

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

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

אולי את אמורה להפוך כל מספר שמוצג כמחרוזת למספר אמתי, כלומר ערך עשרוני ששמור במשתנה מסוג int?

או רק להדפיס מיקומים של התחלה וסוף של כל תת-מחרוזת?
 
בעיקרון להפוך למספר .....

אבל מה ששאלתי זה לא מהות התרגיל....זה דרך שלב אחד מתוך כמה שלבים כדי לפתור את התרגיל עצמו שהוא כזה:
צריך לקלוט מהמשתמש מחרוזת עם מספרים גדולים בתור תווים ורק עם רווחים "509648 2349685983989 0535096850976"
אני צריכה לכתוב פונקציה רקורסיבית שמחברת בין המספרים הללו ומדפיסה את התוצאה.
מותר לי להשתמש בפונקציות עזר אבל לא בלולאות... אלא רק בIF וגם זה רק בפונקציה הראשית של התרגיל....
 
יש למישהו רעיון לפונקציה שמפרידה בין המספרים

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

תחזיקי בצד מערך בגודל קבוע כלשהו (נגיד 100). תעברי בלולאה על המערך המקורי. מצאת מספר? תעתיקי אותו למערך העזר. מצאת רווח? יופי, זה סוף של מספר, תדפיסי את מערך העזר ותאפסי אותו. מדובר על פחות מ 10 שורות קוד בסך הכל, ונראה לי שלצורך התרגיל זה מספיק טוב.
 
מה הבעיה


את קוראת ל- strtok(str," \t")zzz בשביל לקבל את תת-המחרוזת הראשונה, וא"כ ל strtok(NULL," \t")zzz בשביל להביא את תתי המחרוזות הבאות.

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