[22 בינואר 2008] [7 תגובות]
מהי הדרך הקלה, המהירה והפשוטה ביותר להפוך מחרוזת בשפת התיכנות #C ?
הנה המחרוזת שלנו:
string str = "Reverse Me";
המטרה שלנו היא לייצר מחרוזת חדשה המכילה את הטקסט: eM esreveR
המתכנת הממוצע מצפה ש-#C כבר דאגה לו לפונקציה כזאת, הוא כותב בקוד:
str.
עם כתיבת הנקודה(.), סביבת העבודה(Visual Studio) מראה לו את כל השיטות של המחלקה string. הוא מחפש ומחפש אך לא מוצא פונקציה בעלת השם Reverse או משהו דומה.
יכול להיות ש-#C לא מכילה שיטה כל כך בסיסית ? מסתבר שהכל יכול להיות.
אחרי חיפושים, מצאתי כי למחלקה Array(מערך) ישנה שיטה בשם Reverse ומכיוון שמחרוזת היא למעשה מערך, ניתן להשתמש בשיטה זו.
לכן נכתוב קוד בשלושה שלבים:
- הפיכת המחרוזת למערך.
- הפיכת סדר האיברים במערך.
- הפיכת המערך למחרוזת
הנה הפונקציה:
public static string Reverse(string str)
{
char[] chars = str.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
זהו, קל ופשוט(אך למעשה היה צריך להיות פשוט יותר).
היייי אני שמחה שעליתי היום על האתר הזה......
ממש מקסים! כתוב בצורה ברורה ונקיה ורהוטה.. אין מילים!!
תודה לך טל! תמשיך לעדכן אותנו בטריקים מענינים..................
תודה רבה, אני בהחלט אמשיך :)
וואי תודה.. חכם מאוד
אני די בטוח שיש שיטת הרחבה של LINQ k להפיכת מחרוזות
עלוב למדי.
תלמדו לכתוב קוד נורמלי, והנה לכם פתרון פשוט ביותר:
public static string Reverse(string str)
{
string newSt = "";
for (int i = str.Length; i >= 0; i--)
newSt += str[i];
return newSt;
}
עומרי, לא הייתי רוצה להשתמש בביטוי הלא מכובד שאתה השתמשת בו, אך לפני שאתה משתמש בכינווי גנאי לקוד שמישהו אחר כתב, רצוי שתעצור רגע ותחשוב:
אני לא מוצא תשובה לשאלה מס' 1
לשאלה 2 התשובה ברורה: שימוש בלולאה שעושה מניפולציות רבות על string [במקרה שלנו אם המחרוזת באורך של 100 תוים למשל,מדובר ב-100 מניפולציות], היא גרועה מאוד.
הדרך הנכונה היא להשתמש ב-StringBuilder, אבל אז התשובה לשאלה מס' 1 בעיתית מעט
spaaaaammm!!!!!