به آموزش زبان C (قسمت چهارم – رشته ها) خوش اومدید.
بازبینی اول : در تاریخ ۹۹/۱۱/۰۷ انجام شد!
بخش چهارم:رشته ها:
رشته ها یا همون Strings در واقع همون آرایه هایی از کاراکترها هستند.
نکته : با استفاده از اشاره گرها (Pointers) (یا همون علامت *) در C برای اشاره کردن به یک آرایه کاراکتری ساده استفاده می کنیم (بعدا بررسی می کنیم)
یک رشته را می توانیم به روش زیر تعریف کنیم:
char name[] = "John Smith";
در واقع [] می گوید که ما رشته با هر سایزی را می تونیم تعریف کنیم و کامپایلر به صورت اتوماتیک سایز رشته رو محاسبه می کنه. اما اگه بخوایم به اون سایز بدیم باید تعداد کاراکترها را درون [] تعریف کنیم:
char name[] = "John Smith";
/* is the same as */
char name[۱۱] = "John Smith";
اگر دقت کنید “John Smith” از ۱۰ کاراکتر (شامل اسپیس هم هست) تعریف شده است. ولی ما آن را ۱۱ تایی تعریف کردیم. چرا؟ به خاطر اینکه از یک کاراکتر به عنوان خاتمه یا پایان رشته استفاده می کنیم: یک کاراکتر ویژه (برابر با ۰) که پایان رشته را نشان می دهد. در واقع پایان رشته علامت گذاری می شود چراکه برنامه نمی داند طول رشته چقدر است. و فقط کامپایلر است که با توجه به کد می فهمد طول رشته چقدر است.
قالب بندی رشته با printf:
ما می توانیم از دستور printf استفاده کنیم تا یک رشته را فرم یا تشکیل دهیم به مثال زیر توجه کنید:
char * name = "John Smith";
int age = ۲۷;
/* prints out 'John Smith is 27 years old.' */
printf("%s is %d years old.\n", name, age);
همانطور که می بینید دستور printf دو متغیر (name و age) را گرفته و یک رشته تشکیل می دهد. در واقع با مشخصه هایی که به صورت s% و d% نشان داده می شوند نوع و محل متغیر که قرار است بنشیند را تعیین می کند.
در مثال بالا متغیر name جای s% و متغیر age جای d% می نشیند.
اگه خوب نگاه کنید s یعنی string و d یعنی decimal
طول رشته (strlen):
با استفاده از تایع strlen می توان طول یک رشته را بدست آورد. به مثال زیر نگاه کنید:
char * name = "Nikhil";
printf("%d\n",strlen(name));
در مثال بالا می توان سایز رشته name را بدست آورد. که تعداد آن ۶ است. و رشته name از ۶ کاراکتر تشکیل شده است.
مقایسه رشته ها (strncmp):
با استفاده از تابع strncmp می توان دو رشته را با هم مقایسه کرد. اگر دو رشته کاملا شبیه به هم باشند خروجی این تابع ۰ و یا یک عدد مخالف صفر (به تعداد اختلاف هایشان) خواهد بود. شکل کلی این تابع به صورت زیر است:
int strncmp(const char *str1, const char *str2, size_t n)
که منظور از str1 اولین رشته برای مقایسه است.
منظور از str2 دومین رشته برای مقایسه است.
و عدد n ماکزیمم کاراکترهایی که قرار است با هم مقایسه شوند (یعنی n کاراکتر رشته اول با n کاراکتر رشته دوم با هم مقایسه می شوند)
اما خروجی این تابع یه سه صورت خواهد بود:
اگر st1 کوچکتر از str2 باشد خروجی تابع عدد کوچکتر از صفر خواهد بود.
اگر st1 بزرگتر از str2 باشد خروجی تابع عدد بزرگتر از صفر خواهد بود.
و اگر st1 برابر با str2 باشد خروجی تابع عدد صفر خواهد بود.
البته تابع دیگری هم شبیه strncmp هست ولی معمولا استفاده نمی شود. به مثال زیر توجه کنید:
char * name = "John";
if (strncmp(name, "John", ۴) == ۰) {
printf("Hello, John!\n");
} else {
printf("You are not John. Go away.\n");
}
در مثال بالا دو رشته “John” و name که در واقع هر دو “John” هستند در ۴ کاراکتر اول با هم مقایسه می شوند و خب همانطور که واضح است هردو یکسان هستند پس خروجی تابع ۰ خواهد بود و پیغام “Hello, John” نمایش داده میشود.
اتصال رشته ها (strncat):
از تابع strncat برای اتصال دادن دو رشته استفاده می شود. که به صورت زیر تعریف می شود:
int strncat(const char *str1, const char *str2, size_t n)
در این تابع str1 رشته اول یا رشته هدف است
و str2 رشته دوم یا رشته ای که قرار است به رشته اول بچسبد یا متصل شود
و عدد n تعداد کاراکترهایی که از رشته دوم به رشته اول قرار است بچسبد را تعیین می کند.
حالا اگر عددی بیشتر از تعداد کاراکترهای رشته دوم به جای n نوشته شود. ماکزیمم تعداد کاراکترهای str2 در نظر گرفته می شود.
به مثال زیر توجه کنید:
char dest[۲۰]="Hello";
char src[۲۰]="World";
strncat(dest,src,۳);
printf("%s\n",dest);
strncat(dest,src,۲۰);
printf("%s\n",dest);
تمرین:
یک رشته با نام first_name و با محتوای John با استفاده از اشاره گر و یک رشته دیگر با نام last_name با محتوای Doe به صورت محلی درست کنید و کد زیر را تکمیل کنید:
#include <stdio.h>
#include <string.h>
int main() {
/* define first_name */
/* define last_name */
char name[100];
last_name[0] = 'B';
sprintf(name, "%s %s", first_name, last_name);
if (strncmp(name, "John Boe", 100) == 0) {
printf("Done!\n");
}
name[0]='\0';
strncat(name,first_name,4);
strncat(name,last_name,20);
printf("%s\n",name);
return 0;
}
پایان آموزش زبان C (قسمت چهارم – رشته ها)