کار با رشته ها در سی پلاس پلاس

رشته ها در سی پلاس پلاسدر بخش هشتم از سری آموزش زبان برنامه نویسی سی پلاس پلاس ، قصد داریم مبحث رشته ها را مورد بررسی قرار دهیم.برای اینکه بتوانیم برنامه های کامل تر و بهتری با استفاده از رشته ها در سی پلاس پلاس بنویسیم، نیاز داریم که بیشتر با این زبان برنامه نویسی آشنا شویم.

برای مشاهده این مبحث به ادامه مطلب بروید.

کار با رشته ها در سی پلاس پلاس

رشته ها یکی از مهمترین انواع داده ها در زبانهای برنامه سازی هستند. یک رشته به یک توالی از صفر یا چند کاراکتر گفته می شود. بعنوان مثال Ali یک رشته کاراکتری است. از رشته ها در موارد بسیاری همچون ذخیره اسم و آدرس استفاده می شود.

در زبان ++C نوع داده مشخصی برای رشته وجود ندارد، بلکه یک رشته بصورت آرایه ای از کاراکترها تعریف می گردد. بعنوان مثال:

char  name[10];

 در مثال فوق متغیر name بعنوان یک آرایه 10 عضوی از کاراکترها تعریف شده است، بنابراین می تواند یک رشته با حداکثر 10 کاراکتر را در خود نگاه دارد. اما فرض کنید قصد داریم رشته ای مانند Ali را در این متغیر ذخیره نماییم که کمتر از 10 کاراکتر دارد. دراینصورت زبان ++C  چگونه دریابد که در هنگام انجام عملیات مختلف برروی این رشته، مثلا در هنگام چاپ آن، فقط باید 3 حرف اول رشته را چاپ نمای. برای حل این مشکل، طراحان زبان ++C از یک کاراکتر خاص بنام null استفاده کردند. کلیه رشته ها در زبان ++C باید به کاراکتر null ختم گردند. در حقیقت در زبان ++C یک رشته هنگامی که به null برسد، خاتمه می یابد  و نه زمانیکه به انتهای آرایه برسد. کاراکتر null، دارای کد اسکی 0 می باشد و با ’0\’ نشان داده می شود. بعنوان مثال به نمونه زیر دقت کنید:

char  name[10] = {'A', 'l', 'i', '\0'};

 در مثال فوق، متغیر name بصورت آرایه ای 10 عضوی از کاراکتر تعریف شده و مقدار اولیه Ali به آن نسبت داده شده است. دقت کنید که در حقیقت 4 عضو از آرایه پر شده است و عضو آخر به null تخصص داده شده است. مقادیر عناصر بعدی آرایه مهم نیست، چرا که در هنگام انجام عملیات برروی رشته name از آنها صرفنظر می گردد. بنابراین دقت کنید که در هنگام تعریف یک رشته، یک عنصر اضافه برای کاراکتر null در نظر بگیرید.

همانطور که درشماره های قبلی قبل گفتیم، در زبان ++C امکان تعریف ثابت رشته ای نیز وجود دارد. یک ثابت رشته ای، دنباله ای از کاراکترها است که در داخل ” قرار می گیرد. بعنوان مثال “Ali” نشاندهنده یک ثابت رشته ای است. توجه کنید که هنگامی که از ” برای یک ثابت رشته ای استفاده می کنید، کامپایلر یک علامت null در انتهای رشته اضافه می کند. از ثوابت رشته ای برای مقداردهی اولیه به متغیرهای رشته ای نیز می توان استفاده کرد. بعنوان مثال:

char  name[10] = "blog.pasys.ir" ;

برای خواندن و نوشتن رشته ها می توان از توابع cin و coutاستفاده کرد. بعنوان مثال به نمونه زیر دقت کنید:

#include<iostream.h>
#include<conio.h>
void main(){
char name[100];
cout<<"please enter your name:"<<endl;
cin>>name;
cout<<"your name is: "<<name;
getch();
}

اما متاسفانه برنامه فوق مشکلی دارد. به اجرای دیگری از همین برنامه توجه کنید:

what is your name ? Mohamad reza
your name is Mohammad

همانطور که می بینید با وجود اینکه فرد کلمه Mohamad reza را وارد کرده است، اما تابع  cin فقط قسمت اول یعنی Mohamad را در متغیر name قرار داده است. دلیل این مسئله آن است که تابع cin به محض رسیدن به کاراکتر فضای خالی (space)، گمان می کند که رشته خاتمه یافته است و از بقیه آن صرفنظر می کند. برای رفع این مشکل می توان از تابع دیگری بنام gets استفاده کرد. این تابع یک متغیر رشته ای را بعنوان پارامتر ورودی دریافت و پس از خواندن یک رشته از صفحه کلید، آن را در پارامتر ورودی قرار داده و باز می گرداند. نکته مهم این است که تابع gets تا زمانیکه کلید Enter فشرده نشده است، به خواندن داده ها از صفحه کلید ادامه می دهد. بنابراین رشته می تواند دارای فضای خالی (space)‌نیز باشد. به بازنویسی مثال قبل با تابع gets دقت کنید:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main(){
char name[100];
cout<<"please enter your name:"<<endl;
gets(name);
cout<<"your name is: "<<name;
getch();
}

لازم به ذکر است که برای چاپ رشته ها نیز تابعی بنام puts وجود دارد. بعنوان مثال بجای آخرین تابع cout در مثال بالا می توانستید به شکل زیر عمل کنید:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main(){
char name[100];
cout<<"please enter your name:"<<endl;
gets(name);
cout<<"your name is:"<<endl;
puts(name);
getch();
}

 برای کسب اطلاعات بیشتر درباره زبان برنامه نویسی سی پلاس پلاس می توانید به cplusplus و  tutorialspoint مراجعه نمایید. به امید خدا در شماره ی بعدی به موضوعات بیشتری پیرامون مبحث رشته ها خواهیم پرداخت.