פירוט שפת תכנות - string (מערך של תווים chars)

פורום זה מכיל תרגום לעברית של מדריכים, דוגמאות קוד, פירוט שפת תכנות לכרטיסי Arduino וחומרים לימודיים אחרים מהאתר arduino.cc

פירוט שפת תכנות - string (מערך של תווים chars)

הודעהעל ידי Alex » ב' ספטמבר 22, 2014 3:24 pm

מחרוזת טקסט (text) אפשר לייצג בשני דרכים. תוכלו להשתמש בסוג נתון String, שחלק מהסביבה אחל מגרסה 0019, או שתוכלו להגדיר מחרוזת כמערך של תווים (chars) שמסתיימת ב-NULL. עמוד זה מסביר את השיטה השניה. לפרטים נוספים על סוג נתון String, שנותן לכם יותר יכולות על חשבון כמות הזכרון, ראו String (אובייקט object).

דוגמאות
קוד: בחר הכל
  char Str1[15];
  char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
  char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
  char Str4[ ] = "arduino";
  char Str5[8] = "arduino";
  char Str6[15] = "arduino";

אפשרויות הגדרת מחרוזות טקסט
  • Str1 - הגדירו מערך של תווים (chars) מבלי לאתחל את הערך שלהם
  • Str2 - הגדירו מערך של תווים (chars) עם תו אחד יותר ממה שצריך והמהדר (compiler) ישלים הוספה של תו ה-NULL הדרוש
  • Str3 - הוסיפו את תו ה-NULL מצורה מפורשת
  • Str4 - אתחלו עם מחרוזת קבועה הרשומה בגרשיים, המהדר יגדיר את גודל המערך כך שהמחרוזת וגם תו ה-NULL יכנסו לתוכה
  • Str5 - אתחלו את המערך עם גודל מפורש ומחרוזת קבועה
  • Str6 - אתחלו את המערך והשאירו מקום פנוי למחרוזות גדולות יותר
סיומת ה-NULL
בדרך כלל מחרוזות טקסט מסתיימות בתו NULL (תו עם קוד ASCII בערך 0). זה מאפשר לפונקציות (כמו ()Serial.print) לדעת איפה המחרוזת מסתיימת. אחרת הן ימשיכו לקרוא את הבתים (bytes) העוקבים בזכרון שהם לא חלק מהמחרוזת טקסט.
זה אומר שהמערכים שלכם צריכים להיות גדולים בתו אחד נוסף מעבר לאורך המחרוזת שתרצו לשמור בהם. זו הסיבה לכך שמערכים Str2 ו-Str8 בדוגמה מוגדרים בגודל של 8 תווים, למרות שאורך המילה "arduino" הוא רק 7 תווים, התו האחרון מתמלא אוטומטית ב-NULL. גודל המערך Str4 יוגדר אוטומטית ל-8 תווים, אחד לתו ה-NULL. במערך Str3 הגדרנו את תו ה-NULL בצורה מפורשת (כתוב כ-'0\').
שימו לב שיש אפשרות להגדיר מחרוזת טקסט ללא NULL בסוף (למשל אם הייתם מגדירים את אורך המערך Str2 בגודל 7 במקום 8). זה ישבש את פעולות רוב הפונקציות המטפלות במחרוזות, כך שרצוי לא לעשות את זה בכוונת תחילה. אם אתם רואים שמשהו מתנהג מוזר (נעשה טיפול בתווים שלא במחרוזת), כנראה שזו הבעיה.

גרשיים כפולים או גרש בודד?
מחרוזות טקסט תמיד מוגדרות בגרשיים כפולים ("Abc") ותווים תמיד מוגדרים עם גרש בודד ('A').

שבירת מחרוזות ארוכות
אתם יכולים לשבור מחרוזות ארוכות בצורה הבאה:
קוד: בחר הכל
char myString[] = "This is the first line"
" this is the second line"
" etcetera";


מערך של מחרוזות
כשעובדים עם כמות גדולה של מחרוזות, כמו למשל בפרוייקט עם מסך LCD, בדרך כלל נח לסדר את המחרוזות במערך. מכיוון שהחרוזות עצמן הן מערכים, זו בעצם דוגמה של מחרוזות דו-מימדיות.
בדוגמה בהמשך הכוכבית אחרי הגדרת סוג נתון "*char" מסמנת שזהו מערך של מצביעים. למעשה כל שם שאתם מגדירים למערכים הוא בעצם מצביע, כך שהכוכבית בסוף מסמלת זהו מערך של מערכים. מצביעים הוא אחד הנושאים המסובכים עבור המתחילים עם שפת C, אבל זה הכרחי להבין את הפרטים על הנושא כדי להשתמש בהם בצורה יעילה במקרים אלה.

דוגמה
קוד: בחר הכל
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

void setup(){
Serial.begin(9600);
}

void loop(){
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}


ראו גם:
arrays (מערכים)
PROGMEM
הגדרת משתנים

פירוט שפת תכנות לסביבת Arduino


עמוד זה הוא תרגום של string לפי רישיון Creative Commons Attribution-ShareAlike 3.0.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
סמל אישי של המשתמש
Alex
מנהל האתר
 
הודעות: 7459
הצטרף: ה' ינואר 28, 2010 8:27 pm

חזור אל תרגום מדריכים מהאתר arduino.cc

Jump box

מי מחובר

משתמשים הגולשים בפורום זה: CCBot [Bot]