در این آموزش با رشته ها در برنامه نویسی C آشنا خواهید شد، تعریف رشته ها، مقداردهی اولیه و استفاده از آنها برای عملیات های مختلف ورودی/ خروجی را به کمک مثال های مختلف یاد خواهید گرفت.
در برنامه نویسی C، رشته دنباله ای از کاراکترها است که با کاراکتر ۰\ به اتمام می رسد. مثال:
char c[] = “c string”;
هنگامی که کامپایلر به دنباله ای از کاراکترهای محصور در علامت های نقل قول برسد، به طور پیش فرض در انتهای آنها کاراکتر ۰\ را اضافه می کند.
تعریف رشته
نحوه تعریف رشته به شکل زیر است:
char s[5];
در اینجا یک رشته ۵ کاراکتری تعریف شده است.
مقداردهی اولیه رشته ها
می توانید رشته ها را به روش های مختلف مقداردهی اولیه کنید.
char c[] = “abcd”;
char c[50] = “abcd”;
char c[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’};
char c[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’};
تخصیص مقدار به رشته
آرایه ها و رشته ها پس از تعریف، از عملگر انتساب پشتیبانی نمی کنند. مثال،
char c[100];
c = “C programming”; // خطا! نوع آرایه قابل انتساب نیست
نکته: به جای آن برای کپی یک رشته می توانید از تابع ()strcpy استفاده کنید.
دریافت رشته از کاربر
برای خواندن و دریافت یک رشته از ورودی می توانید از تابع ()scanf استفاده کنید. این تابع کاراکترهای پشت سر هم را می خواند تا به فاصله یا فضای خالی (فاصله، خط جدید، تب و …) برسد.
مثال ۱: ()scanf برای خواندن رشته های ورودی
#include <stdio.h>
int main()
{
char name[20];
printf(“Enter name: “);
scanf(“%s”, name);
printf(“Your name is %s.”, name);
return 0;
}
خروجی
Enter name: Dennis Ritchie
Your name is Dennis.
حتی اگر رشته ورودی Dennis Ritchie در خود برنامه نوشته شود، باز هم فقط “Dennis” در متغیر name ذخیره میشود. چون بعد از Dennis، یک فاصله وجود دارد.
خواندن یک خط متن
می توانید از تابع ()fgets برای خواندن یک خط رشته و از تابع ()puts برای نمایش رشته استفاده کنید.
مثال ۲: ()fgets و ()puts
#include <stdio.h>
int main()
{
char name[30];
printf(“Enter name: “);
fgets(name, sizeof(name), stdin); // حواندن رشته
printf(“Name: “);
puts(name); // نمایش رشته
return 0;
}
خروجی
Enter name: Tom Hanks
Name: Tom Hanks
در اینجا از تابع ()fgets برای خواندن رشته وارد شده توسط کاربر استفاده شده است.
fgets(name, sizeof(name), stdlin); // خواندن رشته
(sizeof(name برابر با ۳۰ می باشد، بنابراین حداکثر ۳۰ کاراکتر از ورودی به اندازه رشته name می خواند.
برای چاپ رشته از (puts(name استفاده شده است.
نکته: تابع ()gets نیز برای گرفتن ورودی از کاربر است اما از استاندارد زبان C حذف شده است. چون ()gets امکان ورود تعداد کاراکتر دلخواه را فراهم می کند، در نتیجه ممکن است بافر سرریز شود.
ارسال رشته به تابع
رشته ها را می توانید مشابه آرایه ها به تابع ارسال کنید.
مثال ۳: ارسال رشته به تابع
#include <stdio.h>
void displayString(char str[]);
int main()
{
char str[50];
printf(“Enter string: “);
fgets(str, sizeof(str), stdin);
displayString(str); // ارسال رشته به تابع
return 0;
}
void displayString(char str[])
{
printf(“String Output: “);
puts(str);
}
رشته ها و اشاره گرها
مانند آرایه ها، نام های رشته نیز می توانند به اشاره گرها تبدیل شوند. بنابراین می توانید از اشاره گرها برای دستکاری عناصر رشته نیز استفاده کنید. توصیه می کنیم قبل از بررسی این مثال، آموزش آرایه ها و اشاره گرها در برنامه نویسی C را مرور کنید.
مثال ۴: رشته ها و اشاره گرها
#include <stdio.h>
int main(void) {
char name[] = “Harry Potter”;
printf(“%c”, *name); // Output: H
printf(“%c”, *(name+1)); // Output: a
printf(“%c”, *(name+7)); // Output: o
char *namePtr;
namePtr = name;
printf(“%c”, *namePtr); // Output: H
printf(“%c”, *(namePtr+1)); // Output: a
printf(“%c”, *(namePtr+7)); // Output: o
}
توابع رشته ای پر کاربرد
- ()strlen- طول رشته را محاسبه می کند.
- ()strcpy – یک رشته را در یک رشته دیگر کپی می کند.
- ()strcmp – دو رشته را با هم مقایسه می کند.
- ()strcat – دو رشته را به هم متصل می کند.