بررسي توابع ترکيبي رشتهها در برنامهنويسي
پنج شنبه 18 شهریور 1389 5:50 PM
اين توابع در کتابخانهاي به نام 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 است، اين تابع طول رشته را برميگرداند. همانطور که گفته شد رشتهها با بهعنوان تمرين انتظار ميرود که خوانندگان توابع بالا را خودشان بنويسند، بهطور مثال تابع strlen را ميتوان بهصورت زير نوشت: int _strlen(char* str) { int index = 0; while(str[++index]!=0); return index; } براي آشنايي بيشتر با اين توابع به نشاني زير برويد: http://www.cplusplus.com/reference/clibrary/cstring/ اميربهاءالدين سبطالشيخ
چهار راه برای رسیدن به آرامش:
1.نگاه کردن به عقب و تشکر از خدا 2.نگاه کردن به جلو و اعتماد به خدا 3.نگاه کردن به اطراف و خدمت به خدا 4.نگاه کردن به درون و پیدا کردن خدا
پل ارتباطی : samsamdragon@gmail.com
تالارهای تحت مدیریت :
مطالب عمومی کامپیوتراخبار و تکنولوژی های جدیدسیستم های عاملنرم افزارسخت افزارشبکه