סוגי משתנים
__________________________________________________________________________| | |
משתנה פנימי: בתוך הפונקציה (בלוק). בתוך אותה הפונקציה בלבד. כאורך החיים של הפונקציה.
| | |
משתנה גלובאלי: מחוץ לכל פונקציה. בכל הפונקציות המוגדרות מתחת. כאורך החיים של התוכנית.
| | |
משתנה סטטי: בתוך הפונקציה. בתוך הפונקציה. מהקריאה הראשונה לפונקציה עד סוף-
| -התוכנית.
משתנה סטטי לא מאותחל יהיה 0.
שומר על הערך שלו בין קריאה לקריאה.
__________________________________________________________________________
מחרוזות
המחרוזת היא מערך מסוג char המועדפת לשמירת רצף של תווים כלשהו, כמו לדוגמה שמות.כל מחרוזת מסתיימת בתו מיוחד שנקרא "ה- NULL המסיים". (לדוגמה אם המחרוזת מכילה את המילה "shalom" אז 6 התווים של המילה יאוחסנו במקומות 0-5 של המחרוזת (כמו כל מערך) ובמקום 6 של המערך יהיה '0\' (שזה NULL)
יצירת מחרוזת שיכולה להכיל 19 תווים (התו ה 20 הוא NULL):
char Name [20];
קלט של מחרוזת (קולט רק עד האנטר או הרווח הראשון):
scanf ("%s",Name);
הדפסה של מחרוזת:
printf ("%s",Name);
דרך נוספת לקלוט (וליצור) מערך:
char Name [20] = "hello";
או פשוט לרשום:
char Name [ ] = "hello";
וכך המערך Name הוא בגודל 6 בתים, שזה הגודל המינימלי שדרוש על מנת לאחסן "hello" + ה NULL המסיים.
...........................................................
...........................................................
זו הלולאה לבדיקת כל תו במחרוזת:
for (i=0 ; Name [i] != '\0' ; i++ );
הלולאה ממשיכה עד שהיא מגיע לNULL המסיים ושם נגמרת.
התו NULL הוא הראשון באסקי (=0) לכן אפשר לכתוב במקום '0\' רק 0 (בלי המרכאות). אפשר גם לכתוב NULL.
דוגמא: תוכנית אשר קולטת מחרוזת ומוצאת:
- כמות האותיות הגדולות
- כמות האותיות הקטנות
- כמות הספרות
- כמות שאר התווים
#include <stdio.h> void main() { char str[80]; int i,c1,c2,c3,c4; printf("Enter string: "); scanf("%s",str); c1=c2=c3=c4=0; for(i=0 ; str[i] != NULL ; i++) { if(str[i] >= 'A' && str[i] <= 'Z') c1++; else if (str[i] >= 'a' && str[i] <= 'z') c2++; else if (str[i] >= '0' && str[i] <= '9') c3++; else c4++; } printf ("Big: %d Small: %d Digits: %d Others: %d\n",c1,c2,c3,c4); }
הפונקציות gets ו puts
gets (str);
לקליטת מחרוזת (שורה שלמה כולל הרווחים)
puts (str);
מדפיסה מחרוזת ויורדת שורה.
( puts(str); = printf("%s\n",str); )
פונקציות הספרייה <string.h>
הספרייה מטפלת בכל מה שקשור למחרוזות.
strlen
מקבלת מחרוזת ומחזירה את האורך שלה (לא כולל ה NULL המסיים)
char str [80];
gets (str);
k =strlen (str);
מקבלת 2מחרוזות ומעתיקה השניה לראשונה. (האורך של המקבל חייב להיות לפחות באורך של הנותן)
char S[80],T[80];
gets (S);
(מעתיק את התוכן של הימיני לשמאלי) strcpy (T,S);
שימו לב שאסור לעשות פשוט T=S
strcat
מקבלת 2 מחרוזות ומוסיפה השנייה לראשונה (משרשרת)
מקבלת 2 מחרוזות ומוסיפה השנייה לראשונה (משרשרת)
char S[80] = "Hello",T[80] = "There";
strcat (S,T);
strcmp
מקבלת 2 מחרוזות ומשווה בינהן מבחינת ה א"ב (כלומר כמו סדר של מילון, ע"פ קוד אסקי).
היא מחזירה:
1 אם המחרוזת הראשונה גדולה מהשנייה.
1- אם המחרוזת הראשונה קטנה מהשנייה.
0 אם שתי המחרוזות שוות.
דוגמאות:
shalom < shlomo -1
Bill < bill -1
adc = adc 0
מקבלת 2 מחרוזות ומשווה בינהן מבחינת ה א"ב (כלומר כמו סדר של מילון, ע"פ קוד אסקי).
היא מחזירה:
1 אם המחרוזת הראשונה גדולה מהשנייה.
1- אם המחרוזת הראשונה קטנה מהשנייה.
0 אם שתי המחרוזות שוות.
דוגמאות:
shalom < shlomo -1
Bill < bill -1
adc = adc 0
עריכה:
הפונקציה gets נחשבת היום למסוכנת ובאופן רשמי לא אמורים יותר להשתמש בה!
תוכלו במקומה להשתמש בפונקציה fgets.
דוגמה:
#include <stdio.h> void main() { char str[80]; printf("Enter string: "); fgets(str, sizeof(str), stdin); printf("Your string is: %s", str); }
הבדל משמעותי אחד בין הפונקציות הוא שהפונקציה fgets שומרת גם את תו ירידת השורה (\n) בתוך המחרוזת.
לקריאה נוספת: stackoverflow, GeeksforGeeks
תודה נועם! בלוג מושקע ואיכותי.
השבמחק