cpp-05-05 - مگه ما رشته داریم؟ strings in cpp
cpp-05-05 - مگه ما رشته داریم؟ strings in cpp
توضیحات :
در C++ برای کار با رشتهها (String) دو روش اصلی وجود دارد. قبل از هر چیز بیاییم از پایه شروع کنیم که دقیقاً رشته چیست و چرا در C++ رفتار متفاوتی دارد.
🔹 1. تعریف یک رشته در C++ (روش مدرن با <string>)
برای اینکه بتوانیم از رشتهها استفاده کنیم، ابتدا باید هدر فایل زیر را include کنیم:
سپس داخل تابع main مثل هر نوع دادهی دیگر میتوانیم یک متغیر رشتهای تعریف کنیم:
این کاملاً درست کار میکند و خروجی هم همان رشته خواهد بود.
اما یک نکتهی مهم اینجاست:
🔵 2. نکتهٔ کلیدی: C و C++ ذاتاً نوع دادهٔ رشته ندارند
این موضوع هم در C صادق است و هم در C++:
نوع دادهٔ string بهصورت نیتیو و اصلی در زبان وجود ندارد.
یعنی چی؟
-
وقتی
int a = 5مینویسی:
این دستور مستقیماً به کد CPU تبدیل میشود.
چونintیک نوع دادهٔ ذاتی (native) زبان است. -
اما وقتی مینویسی:
این مستقیماً به کد CPU تبدیل نمیشود.
چون string اصلاً جزو نوعهای پایهٔ زبان نیست!
بلکه:
-
ابتدا کد تبدیل میشود به یکسری عملیات C++
-
آن عملیات بعداً تبدیل میشود به کد CPU
پس رشتهها در C++ با یک هدر فایل و لایبرری اضافه شدهاند
و ذات خود زبان، رشته را بهعنوان نوع دادهی پایه ندارد.
🔵 3. پس رشته از نگاه زبان چیست؟ (تعریف واقعی و پایهای)
اگر بخواهیم دقیق توضیح بدهیم:
رشته یعنی مجموعهای از چند «کاراکتر» کنار هم.
مثلاً "ABC"
-
کاراکتر
A -
کاراکتر
B -
کاراکتر
C
رشته = مجموعهای از کاراکترها
در C و C++ ما نوع دادهای به نام:
داریم.
این یک کاراکتر است.
حالا اگر بخواهیم چند کاراکتر کنار هم بگذاریم، چه چیزی داریم؟
یک آرایه از کاراکترها.
بله!
تعریف واقعی رشته در C و C++ :
string = یک آرایهٔ char + یک کاراکتر پایاندهنده
🔵 4. ساخت رشته بدون string (روش سنتی و پایهای)
میتوانیم یک رشته را با آرایهٔ char بسازیم:
چرا ۶؟
چون:
-
s
-
a
-
l
-
a
-
m
-
\0← نول ترمینیتور (کاراکتر پایان رشته)
همهٔ رشتههای زبان C و C++ باید این کاراکتر پایان را داشته باشند.
بدون \0 رشتهای وجود ندارد.
🔹 چرا باید نول ترمینیتور داشته باشد؟
زیرا زبان باید بفهمد رشته کجا تمام میشود.
اگر این \0 نباشد، زبان ادامهٔ حافظه را میخواند تا زمانی که شانسی به صفر برسد و این باعث خطا میشود.
مثال:
کامپایلر خطا میدهد، چون طول کافی ندارد.
نسخهٔ درست:
🔵 5. در پشت صحنه: string دقیقاً چگونه کار میکند؟
وقتی مینویسی:
در حقیقت:
-
یک آرایهٔ کاراکتر ساخته میشود
-
مقداردهی میشود
-
پشت صحنه نول ترمینیتور گذاشته میشود
-
یک سری توابع و امکانات اضافه در اختیار تو قرار میگیرد
مثل:-
s.length() -
s.substr() -
s.find() -
و...
-
در واقع string فقط یک کلاس پیشرفته است که روی آرایهٔ char ساخته شده.
🔵 6. کار با آرایهٔ کاراکتر (درک کامل نحوهٔ شکلگیری رشته)
مثال آموزشی:
اجرای آن رشته را چاپ میکند.
چرا؟
چون:
-
۵ کاراکتر اصلی دارد
-
خانهٔ ششم =
\0(اتمام رشته)
اگر آن \0 نباشد، کد یا خطا میدهد یا اطلاعات اضافی چاپ میکند.
🔵 7. پس بالاخره از «string» استفاده کنیم یا «char array»؟
پاسخ:
-
برای یادگیری مفاهیم بنیادی → char array
-
برای پروژه واقعی، کار کاربردی، و ساخت برنامه → string
چرا؟
چون:
-
نوشتن با char array سخت است
-
مدیریت نول ترمینیتور همیشه دردسر دارد
-
امکانات string بسیار بیشتر و امنتر است
-
string بهینه طراحی شده و سرعت خوبی دارد
-
خوانایی کد بهتر میشود
🔵 8. جمعبندی نهایی
-
C/C++ ذاتاً نوع رشته ندارند.
-
رشتهٔ واقعی = آرایهٔ char که با
\0تمام میشود. -
stringاز طریق هدر<string>اضافه شده و یک کلاس پیشرفته است. -
در پشت صحنه، string همان آرایهٔ کاراکتر است اما با امکانات بیشتر.
-
برای درک ماهیت رشتهها ابتدا آرایهٔ کاراکتر را یاد میگیریم.
-
سپس میتوانیم راحت، امن و حرفهای از string استفاده کنیم.
لطفا برای گذاشتن نظرات خود وارد شوید