עבור לתוכן

הדפסה של מערך עם מחרוזות בסדר ABC בשפת C

Featured Replies

פורסם

היי, יש לי תרגיל בשפת C

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

יש מערך שאורכו עד 100 תווים.

הוא מכיל משפט שבין כל מילה ומילה יש רווח.

אני צריך להדפיס(לא חייב לשנות את הסדר במערך) את המשפט לפי סדר הABC..

עכשיו הקטע שאסור להשתמש לא בפונקציית ספריה string.h ולא במערך עזר.

יש למישהו אולי רעיון איך כדי לי לעשות את זה?

תודה!!

  • תגובות 34
  • צפיות 6.8k
  • נוצר
  • תגובה אחרונה
פורסם

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

פורסם
  • מחבר

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

פורסם

איך שבא לך, פשוט תשנה את התאים במערך למשהו שהאלגוריתם שלך ידע לדלג עליו.

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

פורסם
  • מחבר

זה אפשרי..סבבה הבנתי נראה לי. אני אנסה לרוץ על זה

תודה!!!

פורסם

אני בכלל לא בעד הפתרון הזה, 2 סיבות:

1. להשמיד את מידע בתוך קוד שעושה פלט זה API מכוער, מאוד מאוד מכוער.

2. זה שבור לחלוטין, לדוגמה זה יעבוד:




char str[] = "blah...";
foo(str);

לעומת זאת, זה:

foo("blah...");

יתן לך seg fault והתוכנה שלך תתרסק.

אם אני אתן לך מערך של intים אתה תדע למיין אותם?

תחשוב איך לעשות index לתוך המחרוזת שאתה מקבל, לדוגמה: אינדקס 2 זאת המילה השלישית.

פורסם

כן, רק ש...

עכשיו הקטע שאסור להשתמש לא בפונקציית ספריה string.h ולא במערך עזר.

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

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

פורסם

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

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

ששאל את השאלה. פשוט לדעתי זה מסוג החריגות האלה שחשוב לפחות להזכיר. ואגב יש סיכוי סביר שהמרצה

שלו אפילו לא יודע שזה קוד פגום או למה...

פורסם
  • מחבר

:hat: תודה

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

פורסם

אפשר לעשות את זה בצורה ממש פשוטה

לולאה חיצונית שמפסיקה רק כאשר הלולאה הפנימית הפסיקה להחליף בין 2 אברים קרובים (אם אחד יותר גדול מהשני כמובן)

2 לולאות אחד בתוך השניה שעושות את העבודה.. בלי פונקציות :)

פורסם
  • מחבר

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

נניח land ball acab lala

יודפס acab ball lala land

פורסם

אני הבנתי את השאלה של הפוסט בצורה שונה

שיש לך לדוגמא את המשפט: my name is reblink

והוא צריך לסדר את כל התווים לפי הABC

זאת אומרת: "abeeiiklmmnnr"

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

פורסם

^^לא מסבך קצת, מסבך הרבה. בלי שימוש במערך עזר הפיתרון הטוב ביותר (והפשוט) זה מה שהציע שניצל - אם לא ברקורסיה אז איטרטיבי.

פורסם

גיל אני מבין שגם אתה הבנת את השאלה כמוני...

אני חושב שזה עדיין אפשרי בדרך של 2 לולאות אחת בתוך השניה אלא שצריך להוסיף לו את העיניין של הרווח

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

אני עכשיו עובד על זה ובודק את העיניין

פורסם

לא הבנתי מה אתה מנסה לעשות. כמובן שצריכים לשמור על סדר האותיות בכל מילה.

תחשוב על זה שאורכי המילים יכולים להשתנות.

ארכיון

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

דיונים חדשים