עבור לתוכן

בעיה ב-C בנושא מחרוזות

Featured Replies

פורסם

שלום לכווולם!

אני די חדש פה-שמעתי שזה אחלה פורום שאוהבים לעזור פה-אז החלטתי להתרשם..

((:

יש לי בעיה ב-C בנושא מחרוזות-3 תרגילים שלא הצלחתי לפתור!אני מאוד מקווה שתוכלו לתת לי כיוון לבעיה:

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

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

3.כתוב תוכנית הקולטת מחרוזת.התוכנית תדפיס את מספר התת מחרוזות במחרוזת הקלט שמתחילות ב-A ומסתיימות ב-B.יש לכתוב אלגוריתם גרידי.

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

תודה רבה!

פורסם

טוב אז ככה...

את הבעיה הראשונה לא הבנתי , מבחינת מופעים האם אתה רוצה למחוק כל אות שמופיעה בשני המערכים או רק מילים שלמות ?

לגבי הבעיה השנייה

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

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

פורסם

זה לא פתרון טוב.

הוא לא יעבוד על

(2+2))(

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

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

פורסם
  • מחבר

אני מחכה......

פורסם

הנה קח:

bool Check(char *str)

{

int soger=0;

int i;

for(i=0;str!='\0';i++

{

if (str=='(')אם הלולאה מגיעה לפתיחת סוגריים היא מוסיפה 1 למשתנה

soger++;

if (str==')'אם לסגירת סוגריים היא מורידה 1 מהמשתנה

soger--;

if (soger<0)

return FALSE; //אם המשתנה קטן מ=0 ז"א שסוגריים נסגרו לפני שנתפחו אז הוא מחזיר טעות

}

if (soger==0) אם כל הסוגררים נסגרו המשתנה יהיה 0 ואז הכל יהיה בסדר

return TRUE;

else אם יש סוגריים שלא נסגרו המשתנה יהיה גדול מ-1 ואז טעות

return FALSE;

}

בבקשה

פורסם

שיט הכל התבלגן

איך מוסיפים קוד בפורום הזה ??

פורסם



bool Check(char *str)
{
int soger=0;
int i;


for(i=0;str[i]!='\0';i++
{
if (str[i]=='(')אם הלולאה מגיעה לפתיחת סוגריים היא מוסיפה 1 למשתנה
soger++;
if (str[i]==')'אם לסגירת סוגריים היא מורידה 1 מהמשתנה
soger--;
if (soger<0)
return FALSE; //אם המשתנה קטן מ=0 ז"א שסוגריים נסגרו לפני שנתפחו אז הוא מחזיר טעות
}

if (soger==0) אם כל הסוגררים נסגרו המשתנה יהיה 0 ואז הכל יהיה בסדר
return TRUE;
else אם יש סוגריים שלא נסגרו המשתנה יהיה גדול מ-1 ואז טעות
return FALSE;
}

פורסם

טוב עכשיו זה נכון.

לגבי 1:

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

ברגע שאתה מוצא את המחרוזת האינדקס הראשון מדלג עליה והשני לא.ואז אתה מעתיק תו-תו מהאינדקס ה1 ל2.

אחרי שהאינדקס ה1 סיים לסרוק את כל ה מחרוזת שים NULL אחרי האינדקס ה2.

לגבי 3:

לא ברור אם זה עם או בלי חפיפה?

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

פורסם

ל 3 (עם חפיפה)

int aCount=0;

int subStrings=0;

for(int i=0 ; i<length ; i++)

{

if(str == 'A')

aCount++;

if(str == 'B')

subStrings += aCount;

}

ב subStrings יש את מספר המחרוזות.

ארכיון

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

דיונים חדשים