יום ראשון, 27 בנובמבר 2016

שפת C - סוגי משתנים, מחרוזות, הפונקציות puts ו gets, הספרייה (יום ראשון)

סוגי משתנים

__________________________________________________________________________

                       מקום ההגדרה              מקום ההכרה                         אורך חיים

                       |                                |                                            |
משתנה פנימי:    בתוך הפונקציה (בלוק).   בתוך אותה הפונקציה בלבד.         כאורך החיים של הפונקציה.
                       |                                |                                            |
משתנה גלובאלי:  מחוץ לכל פונקציה.       בכל הפונקציות המוגדרות מתחת.  כאורך החיים של התוכנית.
                       |                                |                                            |
משתנה סטטי:      בתוך הפונקציה.            בתוך הפונקציה.                       מהקריאה הראשונה לפונקציה עד סוף-
                                                                                                      |  -התוכנית.
                                                                                                        משתנה סטטי לא מאותחל יהיה 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);  





strcpy
מקבלת 2מחרוזות ומעתיקה השניה לראשונה. (האורך של המקבל חייב להיות לפחות באורך של הנותן)
char S[80],T[80]; 
gets (S);                
(מעתיק את התוכן של הימיני לשמאלי)    strcpy (T,S);         

שימו לב שאסור לעשות פשוט   T=S





strcat
מקבלת 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






בהצלחה!









עריכה:
הפונקציה 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) בתוך המחרוזת.

לקריאה נוספת: stackoverflowGeeksforGeeks












תגובה 1: