עזרה בשאלה בשפת C -מחרוזות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


evy

Recommended Posts

שלום,יש לי שאלה בויזואל סטודיו 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.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...