![]() |
|
دورة في اساسيات c++ - الدرس السابع - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغات البرمجة الاخرى (http://vb4arb.com/vb/forumdisplay.php?fid=4) +--- قسم : قسم لغة ++C (http://vb4arb.com/vb/forumdisplay.php?fid=19) +---- قسم : قسم دورات ++C (http://vb4arb.com/vb/forumdisplay.php?fid=38) +---- الموضوع : دورة في اساسيات c++ - الدرس السابع (/showthread.php?tid=11287) |
دورة في اساسيات c++ - الدرس السابع - AGASHE - 31-01-15 الدرس السابع
* النصوص : كما تعلمنا في الدرس السابق مكتبة الدوال الحسابية و رأينا اهم الدوال التي تتصمنها ، في هذا الدرس أيضا سوف نتعرف على مكتبة التعامل مع النصوص . كود : include<string.h>#-----------------------------------
درسنا في أنواع المتغيرات النوع char و هو يقبل فقط حرف واحد ، فكرة النصوص معتمدة على تكوين مصفوفة من النوع char و لكن نظرا لمشكلة حجم المصفوفة و ما الى ذلك يستفضل الاعتماد على هذه المكتبة .------------------------------------
- تعريف متغير من النوع string :كود : string x = "hello world";مثل أي تعريف لمتغير لكن هنا النوع نص ، و لاحظ هنا ان المكتبة هي التي تتولى عملية تحديد حجم النص . -------------------------------------
- أهم العمليات -
1 - الجمع : اجل يمكنك جمع نصين باستخدام " + " كود : int main(){فقط الجمع هو الموجود يعني ما احد يجرب * , / , ..... ![]() =======
2 - التبديل : يتم التبديل باستخدام الدالة swap كالآتيكود : int main(){على عكس البرنامج السابق فهذا البرنامج يطبع hello world! لاحظ هنا السطر كود : x.swap(y);هنا الدالة تبدل قيم المتغيرين دون النظر لاحجامهم او أي تفاصيل أخرى . يمتلك النوع string مجموعة من الدوال الجاهزة كلها تستدعى عن طريق إضافة " . " بعد اسم المتغير مباشرة ، طبعا هناك الكثير من الدوال لكن نحن هنا سوف نتطرق لمجموعة منها ، اذا لم تفهم الكلام سابق غير النصوص السابقة و جرب و غير الى ان تفهمها . =========
3 - البحث عن كلمة : نستعمل الدالة find لايجاد موقع كلمة في نص . كود : int main(){الدالة هنا تعود لنا بقيمة هي عدد صحيح تشير الى مكان اول حرف في الكلمة التي نبحث عنها ، العد من الصفر دائما . ستلاحظ هنا ان الناتج هو 7 و بالفعل لو قمت عد الحرزف ستجد ان c هو 7 عندما نعد من الصفر . =========
4 - نسخ جزء من سلسلة : نحن نعلم اننا لو اردنا نسخ قيمة متغير لآخر نكتب مباشرة كود : x = y;طيب لو اردنا جزء من نص عدد حروف معين نستعمل substr هذه الدالة تستقبل وسيطين الأول و هو الحرف الذي نبدا منه العد و الثاني و هو عدد الحروف التي سوف ننسخها . كود : int main(){ناتج هذا البرنامج هو " love" ، الحرف رقم اثنين هو L (العد يبدأ من الصفر) و 5 هو عدد الحروف التي ستنسخ بما في ذلك الحرف الأول بمعنى انك لو اردت نسخ L فقط ستكتب : كود : y = x.substr(2,1);و لو وضعنا 0 ماذا سيطبع ؟ و لا شيء ![]() ==========
5 - معرفة حجم النص : من المهم ان تعرف حجم النص الذي تستعمله و هنا نستخدم الدالة capacity بدون أي وسيط المهم ان تخزن القيمة في متغير عددي . كود : int main(){ستلاحظ انك مهما غيرت في النص السابق سواء بإزالة حرف ، إضافة حرف ، اكتب حرف واحد بدل النص كله ان الحجم ثابت ! هذا يرجع للمكتبة نفسها فطالما ان نصك اقل من 15 حرف فهي تحجز عموما مساحة 15 حرف حتى لو استعملت انت 1 من 15 ام لو كان النص اكبر من 15 فهي تحجز مساحة 31 حرف حتى لو كان العدد اقل من هذا اما ما بعد ذلك فهي تحجز مساحة بناء على حجمه . ==========
6 - مشكلة الادخال : جرب الكود التالي كود : int main(){جرب ادخال أي جملة بها مسافات .... ماذا تلاحظ ناتج الطباعة هو فقط اول كلمة حتى اول مسافة ![]() طبعا هذه كانت مشكلة عويصة تم حلها باستحدام دالة ادخال جديدة هي getline كود : getline( cin , x , '\n');كما تلاحظ تأخذ هذه الدالة ثلاث وسائط هم : دالة الادخال العادية و المتغير و مكان التوقف و هو في اغلب برامجنا الانتقال لسطر جديد . جرب البرنامج مرة أخرى بعد التعديل : كود : int main(){الحمد لله حلت المشكلة لكن بقي سؤال لو خطر في بالك فهذا يدل على شدة تركيزك و انك تفهم و لا تحفظ ![]() لماذا تأخذ دالة getline الدالة cin كوسيط ؟؟؟ . . . الموضوع يرجع لدوال الطباعة و الادخال القديمة التي كانت تستخدم في لغة c حيث كانت تحتاج بعض العمل من اجل تعريف أنواع القيم التي سوف ندخلها و نطبعها و عموما هذا الموضوع لا يهمنا كثيرا . ==========
7 - الاستبدال : يرتبط الاستبدال بالبحث فهنا نحن نستخدم الدالة find للبحث عن مكان الكلمة التي تريد ازالتها ثم نستعمل الدالة repalce و التي تأخذ ثلاث وسائط هم : مكان النص القديم و ، عدد حروف النص القديم ، النص الجديد . كود : int main(){======================
الى هنا تنتهي حلقتنا النصوصية
الى اللقاء في حلقة أخرى
RE: دورة في اساسيات c++ - الدرس السابع - AGASHE - 01-02-15 كلامك زي العسل بصراحة تخجلني أتمنى لك كل التوفيق من أعماق قلبي و أي نقطة غير واضحة او شيء لم تفهمه فانا موجود في الخدمة |