دوال التعامل مع الحروف و السلاسل الحرفية
|
بسم الله الرحمن الرحيم دوال التعامل مع الحروف و السلاسل الحرفية
أما هنا فسنتطرق إلى دوال مهمة
للمبرمج نفسة و لطبيعة برنامجة العملية . أولاً: الدوال التي تهتم بالحروف و هي تندرج تحت ملف الامتداد ctype.h . _________________________________________________________________________________________________________________________________
int
isalnum ( char ch
); و هذه الدالة تتأكد من إذا كان الحرف المدخل من الأعداد 0 – 9 أو من الحروف A-Z أو a-z , فإذا كان المدخل رقم او حرف فإن الدالة تعيد القيمة غير الصفر ( غالباُ واحد ) و إذا لم يكن حرف و لا رقم فإن الدالة تعيد القيمة صفر . ولنفسر اسم هذه الدالة بالغلة الإنكليزية يكون: Is Alphabetic or is Number ? لنرى كيف نستخدمها : char
ch = 'y' ; // or any number from 0 - 9 و من هنا يتضح كيف نستخدمها . 2.
الدالة : int
isalpha ( char ch); ولها نفس خصائص الدالة أعلاة
و لكنها تختلف عن سابقتها بأنها تعيد صفر حتى ولو كان قيمة الـ ch عدد .
_________________________________________________________________________________________________________________________________ 3. الدالة:
int
theFunction ( char ) ; في الحقيقة هذه الدوال لا تأخذ قيمة من نوع char بل تأخذها من نوع int أي الآسكي كود تبع الحرف . ولكن إذا أرسلت لأحد الدوال متغير
من نوع int سيقبل و لكن على أساس أنه كود
آسكي . و قد وضعت انا المتغيرات من نوع char
وذلك لتسهيل فهم الدوال . #include
"stdio.h" لاحظوا أن هذه
الدوال تأخذ حرف واحد و ليست
جملة. char
toupper ( char ch) ; و تستخدمان هكذا : char
ch = 'Y' ; و هكذا تستخدم الدالة toupper
و اسم هاتين الدالتين تدلان على معناهما. _________________________________________________________________________________________________________________________________ يهذا نكون انهينا تقريباً دوال
التعامل مع الحروف و الآن ننتقل إلى دوال التعامل مع الجمل وهي
تندرج تحت الملف string.h وهذه هي : int
strlen ( chat *s) ; فلو كانت عندنا مصفوفة حرفية
كالتالي: int
length ; ثم إستدعينا الدالة كالتالي: Length = strlen (str) ; ماذا سوف تكون النتيجة ؟ و سترى فائدتها في مثال شامل لكل
هذه المفاهيم بعد قليل إن شاء الله . _________________________________________________________________________________________________________________________________ 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 ); و الجدول أدناه يبين كيفية تحديد قيم المقارنه:
int a
; هنا ستعيد الدالة صفر
للمتغير a. _________________________________________________________________________________________________________________________________ 6. الدالة: char
*strcpy( char *des, const
char *str ) ; وهذه الدالة تنسخ محتويات الجملة
الثانية في الجملة الأولى و يتم مسح ما في الجملة الأولى. مثال هذه الدالة
سيكون مع الدالة القدمة. _________________________________________________________________________________________________________________________________ 7. الدالة: char
*strchr ( const char
*s, char c ) ; وظيفة هذه الدالة هي البحث عن
المتغير c في الجملة s , وتعيد مؤشر على الحرف إذا
كان موجود . #include
"string.h" وتعيد
الدالة NULL إذا لم
يوجد الحرف المراد البحث عنه . هذه هي أهم الدوال الموجوده في
الملف string.h و ليست كلها بل اهمها . وهناك بعض الدوال سأذكرها بسرعة و لن
اشرحها : char
*strlwr(char *s) ; الدالة strlwr تحول جميع
الحروف التي بالحالة الكبيرة إلى الحالة الصغيرة و الدالة
strupr تعمل العكس, وهذه هي الدالة التي لمحت عليها من
قبل. _________________________________________________________________________________________________________________________________ الدالة : char
*strstr( const char
*str, const char
*str_set) ; هذه دالة للبحث عن جملة داخل الجملة , إذا كانت موجوده في فإن الدالة تعيد مؤشر إلى أول حرف من str_set داخل str . أما إذا كانت غير موجودة
فإن القيمة NULL تعاد
من الدالة .
_________________________________________________________________________________________________________________________________ الدالة: char
*strpbrk(const char
*str, const char
*str_char_set) ; هذه الدالة تبحث عن أي حرف من
الجملة str_char_set داخل الجملة str فعندما تصادف أول حرف في
من الحروف الموجودة في str_char_set تعيد الدالة مؤشراً إلى ذلك الحرف ,
وإذا لم تكن أي من حروف موجودة فإن الدالة تعيد NULL
. لنرى هذا المثال الذي يعمل على إزالت أي علامة من العلامات التالية {.,!;'/?-}
من النص المدخل : #include
"string.h" _________________________________________________________________________________________________________________________________ الدالة : char
*strrev(char *s) ; لا تعليق على هذه الدالة فقط قوموا
بتنفيذ هذا البرنامج وسترون النتيجة: #include
"string.h" _________________________________________________________________________________________________________________________________ الدالة : char
*strset ( char *s , char
ch ) ; وهذه الدالة تقوم بتغيير جميع حروف
الجملة s إلى المتغير ch شوفوا هذا المثال للتوضيح : #include
"stdio.h" دعونا نأخذ بعض التمارين قبل الدخول
في دوال الـ stdlib.h. The strstr()
function searchs for first occurrence of a substring within a string. If the
sub string is found, strstr() returns a pointer to the begging of the
substring. If the substring is not found, strstr() returns the null value. الحل ببساطة هو إستخدام الدالة
strstr وسيكون الحل هكذا : #include
"stdio.h"
إلى هنا نتوقف عن مكتبة الـ
string.h ولو أنه يوجد أيضا الكثير مما لم نقف عندها إطلاقاً و لكن
هذه الدوال كافية جدا لعمل اعقد البرامج . _________________________________________________________________________________________________________________________________ 1. دالة : int
atoi( const char
*s) ; وهذه الدالة تحول الجملة المكونه من
أرقام إلى أعدد صحيحة من نوع int يمكن التعامل
معها بالضرب و الجمع كأي عدد آخر. #include
"stdlib.h" إذا لم يكن هناك مجال لتحويل الجملة
مثل الجملة '' 12345. '' فالدالة تعيد القيمة صفر
. 2. الدالة : float
atof(const char *s
) ; وهي تعمل نفس عمل الدالة السابقة و
لكن تغير إلى float و ليس
int . #include
"stdlib.h" _________________________________________________________________________________________________________________________________ 3. الدالة : char
*itoa(int value, char
*string, int readx ) ; هذه الدالة تحول الرقم value
إلى جملة في المتغير string و السبب في ذلك كما هو من أجل التحويل للقيم السالبة و هذا هو نص ما قالته مايكروسوفت بهذا الخصوص: If radix equals 10 and value is negative, the first character of the stored string is the minus sign ( – ).
#include
"stdlib.h" والصراحة بحثت إن كان هناك دالة تحول من نوع float إلى جملة فلم أجد للأسف .
char
*string ; نفذ الآن ستلاحظ ان الدالة ستعيد
NULL ؟!؟! إذاً ماهو الحل : string = (char*)
malloc(sizeof(char))
; بهذا السطر سيعمل برنامجك 100%. #include
"stdlib.h" ولكن ماذا لو أرد أن تعمل برنامج
لإدخال إيميل الإي ميل طبعاً سيحتوي على علامة @ أو من الممكن ان يحتوي على
علامة _ ماهو الحل ؟!؟ if(
s[i] != ' ' && s[i] != '@' && s[i] != '_') فهذا كافي لحل الإشكال ...
int
a; فلو أدخل المستخدم اي حرف مثلاً g
ستكون النتيجة وخيمة قد تنهي البرنامجح فوراً !!! #include
"stdlib.h"
value = atol(s); جربوا هذا البرنامج و سترون انه لا
يقبل غير اعداد فقط و لكن يجب الحذر لأن لا يكون الرقم المدخل اكبر من 10 خانات
و إلا ستكون النتيجة غير صحيحة ;) . _________________________________________________________________________________________________________________________________ آمل أن أكون قد
وفقك في إيصال الفكرة لكم و أن تكونوا قد استوعبتموها ...
|
Copyright © www.kettaneh.net