ציטוט:
נכתב במקור על ידי phpyo
השימוש במצביעים קצת בלבל, כיוון שעוד לא למדתי את זה, אך תודה על הארת העיניים בנוגע לדוגמה שלך, אני אפתור את התרגיל מחדש.
אשמח לפיתרון שאוכל להבין
תודה!
|
פשוט תתעלם מהמצביעים... ותסתכל על הלולואה, זה מה שחשוב כאן.
בלי מצביעים:
PHP קוד:
while (!ok && i < len) {
if ((st)[i] == '$')
if (!fst) fst = i;
else {
next = (i - fst)+i;
if (next < len) {
if ((st)[next] == '$') ok = 1;
}
else fst = i;
}
i++;
}
return ok;
ובמילים:
כל עוד ok הוא שקר ולא הגעת לסוף המחרזות בצע:
בדוק תו-תו:
אם התו הנוכחי הוא התו $:
אם זה התו הראשון מהסוג $ שמור את מיקומו למשתנה fst
אחרת
(כניראה זה התו השני שאנחנו מוצאים... המיקום הנוכחי הוא אמצע המחרוזת הסימטרית)
תו ה-$ הבא צריך להיות ב: מיקום נוכחי פחות המיקום של התו הראשון (ההפרש בין
הראשון לאמצע) ועוד המיקום הנוכחי.
אם המיקום הבא לא חורג מאורך המחרוזת, בדוק האם התו אכן שם.
אם כן שנה את ok ל1.
אם לא, הכנס את המיקום הנוכחי למשתנה fst. (ז"א מבחינתנו זה עכשי והתו
הראשון)