עבור לתוכן

עזרה בשאלה בשפת C -מחרוזות

Featured Replies

פורסם

שלום,יש לי שאלה בויזואל סטודיו C .

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

אני אתן דוגמא: במחרוזת 121212 ,התת מחרוזת הכי גדולה שחוזרת על עצמה הכי הרבה (3 פעמים) היא "12".

במחרוזת 1000022 ,התת מחרוזת הכי גדולה שחוזרת על עצמה הכי הרבה (4 פעמים) היא "0".

תודה לעוזרים.

פורסם

מה יותר חשוב לך? אורך המחרוזת או מספר החזרות?

פורסם

הצורה הפשוטה והמתבקשת היא הצורה הבאה:

לקלוט את כל רצפי המחרוזות הקיימות במחרוזת שנתקבלה, דהיינו אם המחרוזת היא: 121

יש את המחרוזות הבאות: 1,2,1,12,21,121

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

הבעיה פה אולי זה סיבוכיות שעולה ומסתבכת אקספוננציאלית.

אם בכל זאת לא תמצא פתרון אחר, יצירתי יותר, האלגוריתם לעשות מה שרשמתי יהיה ממש פשוט, תעשה אותו איטרטיבי עדיף, 2 לולאות.

פורסם
  • מחבר

מה יותר חשוב לך? אורך המחרוזת או מספר החזרות?

מספר החזרות יותר חשוב מגודל המחרוזת למשל: 11333113331111 אז המחרוזת "1" חוזרת הכי הרבה פעמים.היא זו שתודפס.

אבל אם יש מחרוזות שמס' החזרות שלהן הוא זהה אז תודפס הארוכה מביניהם,למשל:1123123723 .כאן יודפס "23" ולא "1"

פורסם

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

פורסם
  • מחבר

וואיי גאוני!! התחרפנתי איך לעשות את זה...

תודה רבה.

פורסם
  • מחבר

אוקיי הצלחתי לעשות את זה אך נוצרה לי בעיה מסויימת.

למשל במחרוזת 11456456

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

אצלי במצב הזה היא מדפיסה "1".

זה הופך את העיניין להרבה יותר מסובך

פורסם

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

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

פורסם
  • מחבר

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

-זה אומר לשמור את התווים שמופיעים אותו מספר פעמים בתוך מערך

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

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

נשמע לי ארוך ומסורבל הסיפור,לא?!

פורסם

רעיון נוסף - אתה יכול למצוא את כל תתי המחרוזות ולמיין אותן.

פורסם

I'll write in English for convenience.

Not sure what you've done so far, but here's my suggestion:

Supose your string is stored in str.

Create a loop that goes from i=1 to n-1. Each iteration will try to find the substring in length 'i' that is repeated maximum number of times.

On each iteration, use an internal loop to run through the start of the substring.

So you have j=0 to n-i. Now create a function called CountSubstr that accepts a position and lenght, and go over str counting the number of time the substring in position and length appears in str.

Now all you have to do is keep 3 variables (no arrays), maxPosition, maxLenght and maxCount.

Every time you count the number of times a substring occur in str comare the length and count and update if necessary.

ארכיון

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

דיונים חדשים