تعريف النصوص (string)
ال stringفي لغة C++ هو عبارة عن مجموعة من الرموز characters وفي نهاية الstring يوجد بايت يسمى Null characters ويرمز له\O" " . هناك طريقتان لتعريف الstring هما اما باستخدام المصفوفة array او باستخدام الpointer مثال ذلك:
char str1[10]; /*Declaring a string containing 10 element using array*/
char* str2; /*Declaring a string using pointer*/
لنفرض ان str1يحتوي على النص “better c” فان تمثيلها في الذاكرة سوف يكون :
|
str1[0] |
str1[1] |
str1[2] |
str1[3] |
str1[4] |
str1[5] |
str1[6] |
str1[7] |
str1[8] |
str1[9] |
|
b |
e |
t |
t |
e |
r |
|
c |
\0 |
|
بينما اذا كان str2 يحتوي على النص “better c” فان تمثيلها في الذاكرة سوف يكون :
|
*str2+0 |
*str2+1 |
*str2+1 |
*str2+3 |
*str2+4 |
*str2+5 |
*str2+6 |
*str2+7 |
*str2+8 |
|
b |
e |
t |
t |
e |
r |
|
c |
\0 |
ان الفرق بين الطريقتين هو ان الطريقة الاولى (طريقة المصفوفة) تحجز دائماً عدد معين من العناصر (الحروف والرموز) , وفي مثالنا كانت عشرة عناصر-
اما الطريقة الثانية (طريقة الpointer) فان عدد العناصر غير محدد ويكون عدد عناصر المتغير مساوي لعدد عناصر القيمة التي يحملها مضافا اليها الnull character , وفي مثالنا كانت تسعة عناصر-
فمثلاً في المثال السابق عندما اعطينا القيمة “better c” - والتي تتكون من ثمانية عناصر - للمتغير str1 فانه سوف يبقى آخر عنصر من المصفوفة من غير أستخدام.
اما في حالة str 2 فان عدد العناصر كان تسعة عناصر بنفس عدد عناصرالstring ولو غيرنا قيمة str 2 وجعلناها “c++” فقط. فان عدد العناصر سوف يتغير ويصبح ثلاثة عناصر+null char
ومن هنا يتبين لنا ان طريقة الpointer هي طريقة اقتصادية من ناحية الذاكرة والآن لنحاول ان نعطي str1 القيمة “programming in c++” . ان عدد عناصر str 1 في مثالنا السابق هي عشرة عناصر بينما القيمة التي نحاول ان نعطيها تحتوي على 18 عنصر لذلك فان المتغير str1 سوف يرفض القيمه و ستظهر رسالة خطا تبين ان عدد العناصر اكبر مما ينبغي.
اما بطريقة الpointer فان اعطاء القيمة “programming in c++” للمتغير str2سوف لن تواجه اي مشاكل وسيتغير عدد عناصر str2تلقائياً بعد اعطاء القيمة ويصبح 18 عنصر بعدد عناصر القيمة التي يحملها وكما يلي:
|
*str2+0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*str2+17 |
|
|
p |
r |
o |
g |
r |
a |
m |
m |
i |
n |
g |
|
i |
n |
|
c |
+ |
+ |
\0 |
ملاحظة :-
يجوز تعريف المتغير باستخدام المصفوفةArray ثم استخدام عناصره وتغيير قيمتها باستخدام الpointer والعكس صحيح.