پاس دادن رشته به تابع
ارسال رشتهها به توابع، تغییر رشته داخل تابع و الگوهای کاربردی
پاس دادن رشته به تابع
رشته چون آرایه است، هنگام ارسال به تابع آدرس آن ارسال میشود. پس تابع میتواند رشته اصلی را تغییر دهد:
void printString(char str[]) {
printf("%s", str);
}
void toUpper(char str[]) {
for (int i = 0; str[i] != \x27\x5c0\x27; i++) {
if (str[i] >= \x27a\x27 && str[i] <= \x27z\x27) {
str[i] = str[i] - 32; // تبدیل به بزرگ
}
}
}
مثال: تابع طول رشته
int stringLength(char str[]) {
int len = 0;
while (str[len] != \x27\x5c0\x27) {
len++;
}
return len;
}
مثال: شمارش حروف صدادار
int countVowels(char str[]) {
int count = 0;
for (int i = 0; str[i] != \x27\x5c0\x27; i++) {
char c = tolower(str[i]);
if (c == \x27a\x27 || c == \x27e\x27 || c == \x27i\x27 || c == \x27o\x27 || c == \x27u\x27) {
count++;
}
}
return count;
}
مثال: معکوس کردن رشته
void reverseString(char str[]) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
const برای محافظت
اگر نمیخواهید تابع رشته را تغییر دهد، پارامتر را const کنید:
void printOnly(const char str[]) {
// str[i] = \x27X\x27; // ❌ خطای کامپایل
printf("%s", str); // ✅ فقط خواندن
}
نکات مهم
- برخلاف اعداد، تغییرات روی رشته داخل تابع دیده میشود چون آدرس ارسال شده
- استفاده از const در پارامتر، قصد شما را شفاف میکند و از تغییرات ناخواسته جلوگیری میکند
- برای پیمایش رشته همیشه شرط
str[i] != \x27\x5c0\x27را داشته باشید
این مبحث بخشی از دوره آموزش کامل زبان C است.