بررسی توابع ترکیبی رشته‌ها در برنامه‌نویسی

اسپاگتی با طعم استاندارد

دو هفته پیش درباره مفهوم رشته‌ها توضیح دادیم، حال قصد داریم توابع کار با رشته‌ها که در کتابخانه استاندارد C وجود دارد را با هم بررسی کنیم و با آنها بیشتر آشنا بشویم.
کد خبر: ۳۵۱۶۶۹

این توابع در کتابخانه‌ای به‌ نام string.h هستند، پس برای استفاده از آنها باید دستور زیر را در آغاز کدهای خود بنویسیم:

#include «string.h»

این دستور به کامپایلر می‌فهماند که برنامه ما از این کتابخانه استفاده کرده و برای کامپایل نیاز است این کتابخانه نیز بارگذاری شود. این توابع را به ترتیب بررسی می‌کنیم:

توابع ترکیب رشته‌ها

Strcat: این تابع دو رشته را گرفته و به‌‌هم می‌چسباند و سپس نتیجه را به‌عنوان خروجی بر می‌گرداند.

تعریف تابع به‌صورت زیر است:

char * strcat ( char * destination, char * source );

strncat: این تابع دقیقا مثل تابع بالا رفتار می‌کند، با این تفاوت که به اندازه مشخصی از رشته دومی را به رشته‌ اولی می‌چسباند. مثلا:

Char str1[] = “jamejam”;

Char str2[] = “online”;

Strncat(str1,str2,2);

Output » jamejamon

نحوه تعریف این تابع به‌صورت زیر است:‌

char * strncat (char * destination, char * source, size_t num);

اگر به‌جای num طول رشته دومی را بدهیم همان کار تابع بالا را انجام می‌دهد.

Strcpy: این تابع یکی از توابع مهم در رشته‌هاست، این تابع یک رشته را در یک رشته دیگر کپی می‌کند.

نحوه تعریف این تابع به‌صورت زیر است:

char * strcpy ( char * destination, char * source );

strncpy: این تابع عملی شبیه به strncat برای strcat دارد، یعنی شما مقدار محدودی از یک رشته را در رشته دیگر کپی می‌کنید.

نحوه تعریف آن نیز مثل strncat است:

char * strncoy ( char * destination, char * source, size_t num );

strcmp: این تابع دو رشته را با هم مقایسه می‌کند و یک عدد صحیح را به‌عنوان خروجی برمی‌گرداند. اگر دو رشته با هم برابر باشند مقدار صفر را به‌عنوان خروجی برمی‌گرداند.

اگر دو رشته با هم متفاوت باشند همین که به اولین کاراکترهایی که مخالف هم هستند رسید آن کاراکتر در رشته دوم را با کاراکتر متناظر از رشته اول مقایسه می‌کند، اگر بزرگتر بود (کد اسکی دو کاراکتر با هم مقایسه می‌شوند) عدد ?- و اگر کوچکتر بود ? را برمی‌گرداند. تابع به‌صورت زیر تعریف شده است:

int strcmp ( const char * str1, const char * str2 );

strncmp: این تابع نیز مانند باقی توابع دارای n یک مقدار مشخص از یک رشته را با رشته دیگر مقایسه می‌کند و نحوه تعریف آن به‌صورت زیر است:

int strncmp ( const char * str1, const char * str2, size_t num );

در استفاده از تمامی توابع بالا جهت حصول از اطمینان از عملکرد توابع پیشنهاد می‌شود از تعریف دوم تابع استفاده کنید مثلا strncat به‌جای strcat، استفاده از این توابع باعث می‌شود امنیت کد شما بیشتر باشد (درباره خطای Overflow پیشتر توضیح داده شده است، همین‌طور در مقاله دو هفته پیش در مورد رشته‌ها).

Strchr: این تابع محل یک کاراکتر را مشخص می‌کند. نحوه تعریف این تابع به‌صورت زیر است:

char * strchr (char * str, int character );

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

Char str1[] = “jamejam”;

Char* find;

Find = strchr(str1,’m’);

Puts(find);

Output » mejam

برای این‌که ببینیم یک کاراکتر در یک رشته چندبار تکرار شده ‌است، باید آن را در یک حلقه قرار دهیم و هر بار تابع strchr را اجرا کنیم، به‌صورت زیر:

find=strchr(str1,’m’);

while (find!=NULL) {

printf (“found at %d\n”,find-str1+1);

find=strchr(find+1,’s’);

}

Strtok: این تابع 2 رشته را به‌عنوان ورودی دریافت می‌کند و سپس رشته اول را بر اساس رشته دوم که نقش جداکننده دارد جدا می‌کند. به‌طور مثال رشته This is test را گرفته و رشته “ “(فاصله) را نیز به عنوان ورودی می‌گیرد و سپس This را بر می‌گرداند. اگر بخواهیم کل رشته را با استفاده از جداکننده جدا کنیم باید آن را در یک حلقه به‌صورت زیر فراخوانی کنیم:

char str[] = “This is a test”;

char * find;

find=strtok(str,” “);

while (find!=NULL) {

puts(find);

find=strtok(find+1,” “);

}

Strlen: این تابع یکی از اساسی‌ترین توابع در کتابخانه string.h است، این تابع طول رشته را برمی‌گرداند.

همان‌طور که گفته شد رشته‌ها با \0 یا کاراکتری که کد اسکی آن صفر است خاتمه پیدا می‌کنند.

به‌عنوان تمرین انتظار می‌رود که خوانند‌گان توابع بالا را خودشان بنویسند، به‌طور مثال تابع strlen را می‌توان به‌صورت زیر نوشت:

int _strlen(char* str) {

int index = 0;

while(str[++index]!=0);

return index;

}

برای آشنایی بیشتر با این توابع به نشانی زیر بروید:

http://www.cplusplus.com/reference/clibrary/cstring/

امیربهاءالدین سبط‌الشیخ

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها