آرايه و رشته كاراكتري

جمعه ، 28 مرداد 1390 ، 11:41 مدیریت کل سایت
چاپ

به نام خدا

آرایه و رشته کارکتری و مقدار دهی اولیه آن

دستورات ورودی برای دریافت رشته شامل cin و cin.getline

دستورات تکمیلی برای کار با رشته شامل strcpy, strncpy, strcat, strncat, strcmp, strncmp, strlen

مثال

آرایه و رشته کارکتری

آرایه کارکتری مثل یک آرایه معمولی است که در مبحث آرایه به آن اشاره نمودیم. تمام اطلاعات در کامپیوتر به صورت کارکتری نمایش داده می شوند.

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

به علت کاربرد زیاد استفاده از این نوع داده ای توابعی برای آن از قبل نوشته شده است که مثلاٌ می توانید طول یک آرایه کارکتری را به دست آورید و یا یک آرایه را در یک آرایه دیگر کپی کنید. همچنین می توانید یک آرایه را به انتهای آرایه دیگر اضافه کنید و ...

در آرایه های کارکتری انتهای آرایه با NULL مشخص می شود. که نمایش آن در syntax یا دستور نگارشی برنامه نویسی به سه صورت NULL (دقت شود که تمام حروف بزرگ است) و 0/  و یا '' (دو عدد تک کت) می باشد. وقتی شما به طور پیش فرض می گویید که آرایه a دارای محتوای program باشد، کامپایلر به طور پیش فرض در انتهای آن NULL را قرار می دهد.

مقدار دهی اولیه یک رشته  کارکتری به چهار صورت زیر ممکن است:

char s0[10]={'c','p','p',,'.','t','a','m','a','d','o','n','\0'};
char s1[]={'c','p','p','.','t','a','m','a','d','o','n','\0'};
char s2[]= "cpp.tamadon";
char *s3 = "cpp.tamadon.org;

در نوع اول که به صورت معمولی و همان طور که در آرایه ها گفته شد مقدار دهی می کنیم.

در نوع دوم که شباهت زیادی به مقدار دهی اولیه در آرایه ها دارد با این تفاوت که خود کامپایلر سایز s1 را بدست می آورد که در این جا 12 است. (11 کارکتر اصلی + ا کارکتر NULL)

در نوع سوم که باز شباهت زیادی به نوع دوم دارد. در اینجا نیز خود کامپایلر سایز s1 را بدست می آورد که در این جا 12 است. (11 کارکتر اصلی + ا کارکتر NULL)

در نوع چهارم که یک اشاره گر از جنس کارکتری مشخص نموده ایم و به حافظه ای که در آن رشته cpp.tamadon ذخیره شده است، اشاره می نماید.

 



دستورات ورودی برای دریافت رشته شامل cin و cin.getline

برای گرفتن مقدار یک آرایه می توان از دستور cin استفاده نمود:

char word[20];
cin>>word;

اما به علت ناقص بودن دستور cin برای خواندن یک رشته کاراکتری از دستور cin.getline استفاده می نماییم. این دستور به آرگومان ورودی می گیرد.

cin.getline(کارکتر پایانی, طول آرایه, نام آرایه);

برای مثال اگر بخواهیم یک رشته از کاربر بگیریم که وقتی به کارکتر 'z' رسید و یا اینکه 30 کارکتر وارد کرد رشته تمام شود به صورت زیر عمل می کنیم:

char a[60];
cin.getline(a,30,'Z');

البته باید توجه داشت که بعد از زدن کلید Enter این دستور شروع به فعالیت می کند. یعنی امکان دارد شما رشته cpp.tamadonZcom را وارد نمایید. در این جا بعد از زدن کلید Enter تنها مقدار cpp.tamadonدر رشته ذخیره می شود.

نحوه دیگر استفاده از دستور cin.getline تخصیص دو ورودی می باشد. به صورت زیر:

cin.getline( طول آرایه, نام آرایه);

 


 

توابع مربوط به رشته کارکتری

این توابع در header یا سرفایل string  قرار دارد و به منظور سرعت در کار با رشته های کارکتری می باشد:

strcpy

رشته s2 را در آرایه s1 کپی می کند و مقدار s1 را بر می گرداند:

strcpy (char *s1, char *s2);

strncpy

حداکثر n کارکتر از رشته s2 را در s1 کپی می کند:

strncmp (char *s1, char*s2, int n);

strcat

رشته s2 را به انتهای رشته s1 می چسباند و مقدار s1 را بر می گرداند:

strcat (char *s1, char *s2);

strncat

حداکثر n کارکتر از s2 را انتهای s1 می پسباند:

strncat (char *s1, char *s2, int n);

strlen

طول رشته s را بدون در نظر گرفتن NULL بر می گرداند. (مقدار خروجی یک عدد است):

strlen(s);

strcmp

رشته s1 را با رشته s2 مقایسه می کند و مقداری که برمی گرداند به صورت زیر است:

مقدار 0 اگر s1==s2

مقدار 1 اگر s1>s2

مقدار 1- اگر s1<s2

منظور از بزرگ تر یا کوچک تر بودن این است که از سمت چپ شروع به خواندن می کند و اگر کد اسکی آن بزرگتر بود رشته بزرگ تر می شود اما اگر مساوی بود آنقدر می خواند تا به پایان برسد و برعکس:

strcmp (char *s1, char *s2);

تابع strncmp نیز مانند دستور بالاست با این تفاوت که حداکثر n کارکتر را چک می نماید:

strncmp (char *s1, char *s2, int n);

 


مثال:

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

# include <iostream>
# include <string>
using namespace std;

int main(){
char *s1="cpp";
char s2[]=".tamadon.org";
char s3[]={'o','r','g','\0'};
char s4 [100];

//1:
cout<<strlen(s2)<<endl;
//2:
cout<<strcpy(s4,s1)<<endl;
//3:
for(int i=0; i<100; i++)
s4[i]=NULL;
cout<<s4<<endl;
//4:
strncpy(s4,s1,3);
cout<<s4<<endl;
//5:
strncat(s4,s2,14);
cout<<s4<<endl;
//6:
strcat(s4,s3);
cout<<s4<<endl;
//7:
cout<<strcmp(s2,s3)<<endl;

system("pause");
return 0;
}//end program


در صورت داشتن هر گونه سوال و یا اشکال  مي توانيد آن را از طریق  افزودن نظر در همین بخش عنوان نمایید.

آخرین بروز رسانی مطلب در شنبه ، 25 خرداد 1392 ، 01:49