الدرس الرابع
تعريف النصوص
(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
والعكس صحيح. |