تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
دورة في اساسيات c++ - الدرس السابع
#1
الدرس السابع

* النصوص :

كما تعلمنا في الدرس السابق مكتبة الدوال الحسابية و رأينا اهم الدوال  التي تتصمنها  ، في هذا الدرس أيضا سوف نتعرف على مكتبة التعامل مع النصوص  .

كود :
include<string.h>#
هذا هو التضمين  لمكتبة string  .
-----------------------------------
درسنا في أنواع المتغيرات النوع char و هو يقبل فقط حرف واحد  ، فكرة النصوص معتمدة على تكوين مصفوفة من النوع char  و لكن نظرا لمشكلة حجم المصفوفة و ما الى ذلك يستفضل الاعتماد على هذه المكتبة .
------------------------------------
- تعريف متغير من النوع string :
كود :
string x = "hello world";

مثل أي تعريف لمتغير  لكن هنا النوع نص ، و لاحظ هنا ان المكتبة هي التي تتولى عملية تحديد حجم النص  .

-------------------------------------
- أهم العمليات -

1 - الجمع :  اجل يمكنك جمع نصين  باستخدام " + "

كود :
int main(){
string x , y;
y = " !";
x = "hello world";
cout<<x + y;
return 0;
}
كما تلاحظ ناتج هذا البرنامج هو   !hello world   
فقط الجمع هو الموجود  يعني ما احد يجرب  *  ,  /   ,  .....  Undecided
=======
2  - التبديل :  يتم التبديل  باستخدام الدالة swap  كالآتي
كود :
int main(){
string x , y;
y = " !";
x = "hello world";
x.swap(y);
cout<<x + y;
return 0;
}

على عكس البرنامج السابق فهذا البرنامج يطبع  hello world!
لاحظ هنا السطر 
كود :
x.swap(y);

هنا الدالة تبدل قيم المتغيرين  دون النظر لاحجامهم او أي تفاصيل أخرى .

يمتلك النوع string مجموعة من الدوال الجاهزة كلها تستدعى عن طريق إضافة " . " بعد اسم المتغير مباشرة ، طبعا هناك الكثير من الدوال لكن نحن هنا سوف نتطرق لمجموعة منها  ،  اذا لم تفهم الكلام سابق غير النصوص السابقة و جرب و غير  الى ان تفهمها .

=========

3 - البحث عن كلمة : نستعمل الدالة find  لايجاد موقع كلمة في نص .

كود :
int main(){
string x;
x = "i love c++";
int y =x.find("c++");
cout<<y;
return 0;
}

الدالة هنا تعود لنا بقيمة هي عدد صحيح  تشير الى مكان اول حرف في الكلمة التي نبحث عنها  ، العد من الصفر دائما .

ستلاحظ هنا ان الناتج هو 7  و بالفعل لو قمت عد الحرزف ستجد ان c  هو 7  عندما نعد من الصفر .

=========

4 - نسخ جزء من سلسلة :

نحن نعلم اننا لو اردنا نسخ قيمة متغير لآخر  نكتب مباشرة

كود :
x = y;
 
طيب  لو اردنا جزء من نص عدد حروف معين  نستعمل  substr  هذه الدالة تستقبل وسيطين  الأول و هو  الحرف الذي نبدا منه العد و الثاني و هو عدد الحروف التي سوف ننسخها .

كود :
int main(){
string x;
x = "i love c++";
string y =x.substr(2, 5);
cout<<y;
return 0;
}

ناتج هذا البرنامج هو   " love"  ، الحرف رقم اثنين هو  L  (العد يبدأ من الصفر)  و 5  هو عدد  الحروف التي ستنسخ بما في ذلك الحرف الأول بمعنى انك لو اردت  نسخ  L فقط ستكتب  :
كود :
y = x.substr(2,1);

و لو وضعنا 0 ماذا سيطبع  ؟ 

و لا شيء Tongue

==========

5 - معرفة حجم النص :

من المهم ان تعرف حجم النص الذي تستعمله  و هنا نستخدم  الدالة capacity  بدون أي وسيط  المهم ان تخزن القيمة في متغير عددي .

كود :
int main(){
string x;
x = "i love c++";
int y = x.capacity();
cout<<y;

return 0;
}

ستلاحظ انك مهما غيرت في النص السابق  سواء بإزالة حرف  ، إضافة حرف  ، اكتب حرف واحد  بدل النص  كله  ان الحجم ثابت !

هذا يرجع  للمكتبة نفسها  فطالما  ان نصك اقل من 15  حرف  فهي تحجز عموما مساحة 15 حرف حتى لو استعملت انت 1  من 15  ام لو كان  النص اكبر من 15  فهي  تحجز مساحة  31  حرف  حتى لو كان العدد اقل من هذا  اما ما بعد ذلك  فهي تحجز مساحة  بناء على حجمه  .

==========

6 - مشكلة الادخال :
جرب الكود التالي

كود :
int main(){
string x;
cin>>x;
cout<<x;
return 0;
}

جرب ادخال أي جملة بها  مسافات  .... ماذا تلاحظ ناتج الطباعة  هو فقط اول كلمة  حتى اول مسافة Huh

طبعا هذه كانت مشكلة عويصة تم حلها باستحدام دالة ادخال جديدة هي getline

كود :
getline( cin , x , '\n');

كما تلاحظ تأخذ هذه الدالة ثلاث وسائط هم  :  دالة الادخال العادية  و   المتغير   و   مكان التوقف  و هو في اغلب برامجنا  الانتقال لسطر جديد .

جرب البرنامج مرة أخرى  بعد التعديل :

كود :
int main(){
string x;
getline(cin , x , '\n');
cout<<x;
return 0;
}

الحمد لله حلت  المشكلة  Rolleyes   لكن بقي سؤال  لو خطر في بالك فهذا يدل على شدة تركيزك و انك تفهم و لا تحفظ Wink

لماذا تأخذ  دالة getline  الدالة  cin  كوسيط ؟؟؟
.
.
.

الموضوع يرجع لدوال الطباعة و الادخال  القديمة التي كانت تستخدم في لغة c  حيث كانت تحتاج بعض  العمل من اجل تعريف أنواع القيم التي سوف ندخلها و نطبعها   و عموما هذا الموضوع لا يهمنا كثيرا  .

==========

7 - الاستبدال : 

يرتبط الاستبدال بالبحث  فهنا نحن نستخدم الدالة find للبحث عن  مكان  الكلمة التي تريد ازالتها  ثم نستعمل الدالة repalce و التي تأخذ ثلاث وسائط  هم  :  مكان  النص القديم و ،  عدد حروف النص القديم  ،  النص الجديد .

كود :
int main(){
string x;
x = "i love java" ;
int y = x.find("java");
cout<< x.replace(y , 4 , "c++");
return 0;
}
======================
الى هنا تنتهي حلقتنا النصوصية Tongue
الى اللقاء في حلقة أخرى

العاب من برمجتي  

Smile
الرد }}}
تم الشكر بواسطة: ربيع
#2
اخي الكريم كلما دخلت صفحتك اشعر وكانني دخلت الى متحف
ما شاء اله تبارك الرحمن كل ما فيها مفيد ويستحق الاهتمام
بارك الله فيك ونفع بك الامة
اللهم آمين
الرد }}}
تم الشكر بواسطة: AGASHE , ربيع , rnmr , rnmr
#3
كلامك زي العسل بصراحة تخجلني

أتمنى لك كل التوفيق من أعماق قلبي

و أي نقطة غير واضحة او شيء لم تفهمه

فانا موجود في الخدمة

العاب من برمجتي  

Smile
الرد }}}
تم الشكر بواسطة: ربيع



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم