מחרוזת (מדעי המחשב)
מראה
יש להשלים ערך זה: בערך זה חסר תוכן מהותי. ייתכן שתמצאו פירוט בדף השיחה.
| ||
יש להשלים ערך זה: בערך זה חסר תוכן מהותי. ייתכן שתמצאו פירוט בדף השיחה. | |
בתאוריה של שפות פורמליות ובמדעי המחשב, מחרוזת (באנגלית: string) היא רצף של סימנים מתוך אלפבית נתון. בשפות תכנות מחרוזת היא טיפוס נתונים המכיל רצף של תווים.
בשפות תכנות
[עריכת קוד מקור | עריכה]בשפות תכנות אימפרטיביות המחרוזת מאוחסנת כמערך של תווים. בשפות פונקציונליות (כגון LISP או Haskell) מחרוזות מאוחסנות כרשימה.
יש מספר צורות מקובלות להתייחסות למחרוזת:
- ישנן שפות המתייחסות למחרוזת כאל מערך רגיל (למשל C) אבל בגלל שימושיותה הרבה של המחרוזת נכתבו לה פונקציות ספריה מיוחדות.
- ישנן שפות בהן המערך מטופל כטיפוס מיוחד בשפה (בדומה למספר), למשל ב־java.
בשפות בהן צורת האחסון היא תמיד כמערך, הצורה המדויקת משתנה בהתאם לשפה:
- בחלק מהשפות (כמו C, אסמבלר), האחסון הוא בצורה של מערך שבסופו יש תו מציין.
- בשפות מסוימות (למשל Pascal) המערך מאוחסן עם הגודל שלו בתחילת המערך.
- בשפות אחרות (למשל ADA) אין כלל טיפול בגודל המערך על ידי השפה ועל המתכנת לדאוג לשמור את גודל המערך.
- ישנן שפות (למשל ב־Visual Basic) בהם נוקטים הן את שיטת התו המציין ואת שיטת שמירת הגודל.
בשפות בהן המחרוזת היא אובייקט, לרוב ההקצאה היא אוטומטית (כלומר כאשר מגדילים את גודל המחרוזת, המערכת מקצה שטח זיכרון גדול יותר) ואילו בשפות אחרות ההקצאה היא סטטית (אם חורגים מגודל המערך ב־C עלולים לקבל השחתת זיכרון).
פעולות על מחרוזות
[עריכת קוד מקור | עריכה]פעולות אופייניות על מחרוזות הן:
- שרשור: איחוד שתי מחרוזות למחרוזת אחת.
- יצירת תת-מחרוזת ממקום מסוים ובאורך מסוים ממחרוזת נתונה. דוגמה: מתת-המחרוזת הנמצאת החל מהמקום החמישי באורך 2 של המחרוזת 'שלום רב שובך' היא 'רב'.
- איתור תת-מחרוזת נתונה במחרוזת נתונה. דוגמה: חיפוש המחרוזת 'רב' במחרוזת 'שלום רב שובך' ייתן את התוצאה 5 (או 4 במחרוזת שהתו הראשון בה נמצא במקום ה-0).
- הכנסת תת-מחרוזת למיקום מסוים במחרוזת נתונה.
- החלפת תת-מחרוזת בתת-מחרוזת אחרת במחרוזת נתונה. ישנן שפות שבהן יתבצע איתור של תת-המחרוזת שתוחלף בערך חדש, וישנן שפות שבהן מיקום מסוים במחרוזת יוחלף בערך חדש.
- השוואת מחרוזת למחרוזת אחרת. באם התוכן זהה יתקבל אמת ובאם התוכן איננו זהה יתקבל שקר.
- בשפות תכנות אין סטנדרט ברור לביצוע פעולות על מחרוזות. בכל שפה בדרך כלל המימושים יהיו שונים הן בשמות הפעולות, והן בצורת הפעלתן. בשפות כמו פסקל, VB ודוט נט שבהן יש תמיכה בפעולות על מחרוזת ברמת השפה, העבודה עם מחרוזות יותר בהירה, נוחה וידידותית. לעומת זאת בשפות כמו C ו-C++ שבהן אין תמיכה במחרוזת ברמת השפה, קיימות ספריות רבות שמממשות באופנים שונים פעולות על מחרוזות, הן רשמיות, הן של חברות מסחריות ואף בקוד פתוח. דבר שגורם לחוסר תאימות, ולבעייתיות לא מעטה בעבודה עם מחרוזות.
ראו גם
[עריכת קוד מקור | עריכה]
מבני נתונים | ||
---|---|---|
מבנים מופשטים | רשימה • מחסנית • קבוצה • מולטי קבוצה • תור • דו-תור • תור עדיפויות • מילון • מחרוזת • איחוד קבוצות זרות | |
מימושים ליניאריים | מערך • מערך משונן • טבלת גיבוב • רשימה מקושרת • רשימת דילוגים • חוצץ | |
גרפים ועצים | ערימה (בינארית • בינומית • פיבונאצ'י) • עץ חיפוש (עץ אדום שחור • עץ 2-3 • עץ 2-3-4) • עץ סיפות • עץ B • עץ +B • עץ AVL • עץ Splay • עץ BSP • עץ kd • עץ R • Trie • X-fast trie • טריי y מהיר• עץ WAVL | |
הסתברותיים | מסנן בלום |