PrAmJnEt مدير عام
عدد المساهمات : 396 نقاط : 146692 العمر : 65
| موضوع: تابع دوره فى لغه السى 11 الإثنين مايو 11, 2009 1:47 pm | |
| بسم الله الرحمن الرحيم دوال التعامل مع الحروف و السلاسل الحرفية هنا نتطرق إلى دوال بعيدة كل البعد عن الدوال السابقة الذكر فالدوال السابقة هي دوال تزيين و تحسين مخرجات فقط . أما هنا فسنتطرق إلى دوال مهمة للمبرمج نفسة و لطبيعة برنامجة العملية . منها: أولاً: الدوال التي تهتم بالحروف و هي تندرج تحت ملف الامتداد ctype.h . _________________________________________________________________________________________________________________________________ 1. الدالة int isalnum ( char ch ); و هذه الدالة تتأكد من إذا كان الحرف المدخل من الأعداد 0 – 9 أو من الحروف A-Z أو a-z , فإذا كان المدخل رقم او حرف فإن الدالة تعيد القيمة غير الصفر ( غالباُ واحد ) و إذا لم يكن حرف و لا رقم فإن الدالة تعيد القيمة صفر . ولنفسر اسم هذه الدالة بالغلة الإنكليزية يكون:Is Alphabetic or is Number ?لنرى كيف نستخدمها : char ch = 'y' ; // or any number from 0 - 9 if ( isalnum (ch) != 0 ) printf("%c is alphanumeric. n"); و من هنا يتضح كيف نستخدمها .
_________________________________________________________________________________________________________________________________2. الدالة : int isalpha ( char ch); ولها نفس خصائص الدالة أعلاة و لكنها تختلف عن سابقتها بأنها تعيد صفر حتى ولو كان قيمة الـ ch عدد .
_________________________________________________________________________________________________________________________________3. الدالة: وصفها | الدالة | Function Key تسأل إذا كان | int iscntrl ( char ) ; | تسأل إذا كان رقم | int isdigit ( char ) ; | Space تتأكد إذا كان الحرف قابل للطباعة ولكن من غير الــ | int isgraph( char ) ; | تسأل إذا كان نوع الحرف صغير | int islower( char ) ; | تسأل إذا كان الحرف قابل للطباعة و يتضمن من ذلك المسافة | int isprint ( char ) ; | يسأل إذا كان الحرف المدخل مسافة | int isspace( char ) ; | يسأل إذا كان نوع الحرف كبير | int isupper ( char ) ; | hex يسأل إذا كان الحرف من نوع | int isxdigit ( char ) ; |
طبعاً أنا ذكرت جميع الدوال على هذه الصيغة: int theFunction ( char ) ; في الحقيقة هذه الدوال لا تأخذ قيمة من نوع char بل تأخذها من نوع int أي الآسكي كود تبع الحرف . ولكن إذا أرسلت لأحد الدوال متغير من نوع int سيقبل و لكن على أساس أنه كود آسكي . و قد وضعت انا المتغيرات من نوع char وذلك لتسهيل فهم الدوال . ولكن ألا تلاحظ أن جميع هذه الدوال تبدأ بالكلمة is ؟ والكلمة is تدل في الاجليزية على صيغة سؤال و السؤال جوابة يكون إما رفض و هو القيمة صفر ( 0 ) و إما قبول و هي غير تلك القيمة.
وهذ مثال يحسب عدد الحروف و الأرقام في جملة معينة : #include "stdio.h" #include "ctype.h" void main() { char str[10] ; int d_count ; // digit counter int c_count ; // char counter int i; // for the loop
d_count = c_count = i = 0 ;
printf(" Please Enter a string: "); gets(str);
while ( str[i] != '' ) { if( isalpha(str[i]) != 0 ) c_count++ ; else if ( isdigit (str[i]) != 0 ) d_count++ ; i++ ; }
printf("There is %d digits and %d chat... ",d_count, c_count); return 0 ; } لاحظوا أن هذه الدوال تأخذ حرف واحد و ليست جملة.
ويوجد هناك ايضاً داتين هما : char toupper ( char ch) ; char tolower ( char ch) ; و تستخدمان هكذا : char ch = 'Y' ; char cc ; cc = tolower ( ch ) ; و هكذا تستخدم الدالة toupper و اسم هاتين الدالتين تدلان على معناهما. ولكن هاتين الدالتين للحروف فقط ... ولكن ماذا لو أردنا للكلمات أي للجمل ؟ الحل لن يخرج عن حلين : الاول : إستخدام while loop و الأخر دالة سنتطرق لها بعد قليل .
_________________________________________________________________________________________________________________________________يهذا نكون انهينا تقريباً دوال التعامل مع الحروفو الآن ننتقل إلى دوال التعامل مع الجمل وهي تندرج تحت الملف string.h وهذه هي :
1. الدالة int strlen ( chat *s) ; فلو كانت عندنا مصفوفة حرفية كالتالي: int length ; char str[20] = "Hi I am Talal" ; ثم إستدعينا الدالة كالتالي: Length = strlen (str) ; ماذا سوف تكون النتيجة ؟ هل ستقول 20 الجواب قطعاً لا ...20 هو حجم المصفوفة و لكن طول الجملة هو 13. و سترى فائدتها في مثال شامل لكل هذه المفاهيم بعد قليل إن شاء الله .
_________________________________________________________________________________________________________________________________2. الدالة : char *strcat ( char *des, const char *str ) ; وظيفتها هي إلحاق الجملة الثانية في نهاية الجملة الألى و تعيد الدالة مؤشر إلى الدالة المضاف إليها. ولكن ليس من الضروري ان تجعل هناك مؤشر للجملة المعدلة و لكن الجملة des ستعدل أوتوماتيكياً.
_________________________________________________________________________________________________________________________________4. الدالة : char *strncat ( char *des, const char *str, int n) ; وهي نفس الدالة السابقة ولكن تضيف أول n حرف من str إلى الـ des حيث أن الـn هي قيمة من نوع int أي قيمة صحيحة .
_________________________________________________________________________________________________________________________________5. الدالة: int strcmp( const char *string1, const char *string2 ); و الجدول أدناه يبين كيفية تحديد قيم المقارنه:
< 0 | string1 less than string2 | 0 | string1 Equal to string2 | > 0 | string1 greater than string2 |
ومثلها الدالة strncmp و لكنها تأخذ متغير ثالث وهو عدد الحروف المراد مقارنتها . فمثلاً لو كان لدينا برنامج به مجموعة أسماء و اردنا أن نعرف كم واحد يبدأ إسمة بـــ"عبد" مثل عبدالله و عندالرحمن و .... إلخ الاحرف المشتركة بين هذه الاسماء هي عبد فقط و لذلك نستخدم الدالة strncmp و نعطي المتغير الثالث قيمة 3 هكذا : int a ; char *str1 = "abdullah", *str2 = "abdurahman" ; a = strncmp(str1, str2, 3) ; هنا ستعيد الدالة صفر للمتغير a.
| |
|