فصل ۸: رشتهها (Strings) در C++
۱. مقدمه: رشته چیست؟
در برنامهنویسی، رشته (String) به معنای توالی یا مجموعهای از کاراکترها است که به صورت پشتسرهم ذخیره میشوند.
مثلاً نام یک شخص، آدرس یک وبسایت، یا یک جمله معمولی همه رشته هستند.
نمونه رشتهها:
"Ali"
"Hello, World!"
"12345"
حتی اعداد داخل رشته، دیگر به عنوان عدد محسوب نمیشوند، بلکه متن هستند.
۲. تفاوت رشته با کاراکتر
- کاراکتر (
char
) فقط یک حرف، عدد یا علامت است.
مثال:'A'
,'7'
,'#'
- رشته مجموعهای از یک یا چند کاراکتر است.
مثال:"Ali"
,"C++"
,"123"
۳. دو روش اصلی کار با رشتهها در C++
C++ دو روش مختلف برای کار با رشتهها دارد:
- رشتههای سبک C (C-Style Strings) – با استفاده از آرایهٔ
char
و علامت پایان ('\0'
) - کلاس std::string – راحتتر، مدرنتر، و ایمنتر
۴. رشتههای سبک C (C-Style Strings)
تعریف
در این روش، رشته مانند یک آرایه از کاراکترها تعریف میشود و همیشه باید با کاراکتر ویژهٔ '\0'
(null terminator) پایان یابد.
مثال:
#include <iostream>
using namespace std;
int main() {
char name[5] = "Ali";
cout << "Name: " << name << endl;
return 0;
}
توضیح خطبهخط:
char name[5] = "Ali";
یعنی یک آرایه ۵تایی از کاراکتر:'A'
,'l'
,'i'
,'\0'
, (خانه اضافه استفاده نشده)'\0'
به برنامه میگوید رشته کجا تمام میشود.cout << name;
رشته را چاپ میکند.
مقداردهی خانهبهخانه:
char word[4] = {'C', '+', '+', '\0'};
بدون '\0'
، خروجی ممکن است به حروف عجیب ختم شود چون برنامه نمیداند رشته کجا تمام میشود.
ورودی گرفتن C-Style String
مشکل cin
→ فقط تا اولین فاصله ورودی میگیرد.
char name[20];
cin >> name; // اگر وارد کنید "Ali Reza" فقط "Ali" ذخیره میشود
برای گرفتن یک خط کامل از متن باید از cin.getline()
استفاده کنید:
char fullname[50];
cin.getline(fullname, 50);
توابع کتابخانهای برای C-Style Stringها
این توابع در هدر <cstring>
قرار دارند:
تابع | توضیح |
---|---|
strlen(str) | طول رشته (بدون \0 ) |
strcpy(dest, src) | کپی رشته |
strcat(dest, src) | افزودن رشتهٔ دوم به اول |
strcmp(s1, s2) | مقایسه رشتهها |
مثال:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[20] = "Hello";
char b[20] = "World";
cout << "طول a: " << strlen(a) << endl;
strcat(a, b); // a = "HelloWorld"
cout << "ترکیب: " << a << endl;
if (strcmp(a, "HelloWorld") == 0)
cout << "برابرند" << endl;
return 0;
}
۵. رشتههای مدرن با std::string
مزایا نسبت به C-Style:
- نیازی به
\0
و مدیریت دستی حافظه نیست. - طول رشته به طور خودکار مدیریت میشود.
- عملگرها (
=
,+
,==
) به راحتی روی رشتهها کار میکنند.
تعریف و مقداردهی:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name = "Ali Reza";
cout << "Name: " << name << endl;
}
خواندن یک خط کامل:
string fullname;
getline(cin, fullname);
عملگرهای کاربردی:
string a = "Hello";
string b = "World";
string c = a + " " + b; // ترکیب رشتهها
if (a == "Hello") { ... }
متدهای مهم std::string
متد | توضیح |
---|---|
size() یا length() | طول رشته |
empty() | آیا رشته خالی است؟ |
at(pos) | دریافت کاراکتر با بررسی محدوده |
substr(start, length) | بخش رشته |
find(str) | یافتن زیررشته |
replace(start, length, str) | جایگزینی |
append(str) | اضافهکردن انتهایی |
مثال:
string text = "C++ Programming";
cout << text.substr(0, 3); // "C++"
۶. مقایسه C-Style و std::string
ویژگی | C-Style | std::string |
---|---|---|
ایمنی | کم | بالا |
پیچیدگی | زیاد | ساده |
مدیریت طول | دستی | خودکار |
امکانات | محدود | زیاد |
۷. مثال عملی: معکوس کردن رشته
#include <iostream>
#include <string>
using namespace std;
int main() {
string text;
getline(cin, text);
for (int i = text.size() - 1; i >= 0; i--)
cout << text[i];
return 0;
}
۸. مثال عملی: شمارش تعداد کلمات
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string sentence;
getline(cin, sentence);
stringstream ss(sentence);
string word;
int count = 0;
while (ss >> word) count++;
cout << "تعداد کلمات: " << count;
}
۹. نکات حرفهای
- برای رشتههای طولانی یا تعداد زیاد بهتر است از
std::string
استفاده کنید. - از
\0
در C-Style String غافل نشوید. - در عملیات بسیار سنگین، تخصیصهای پیاپی حافظه روی کارایی اثر دارد.
۱۰. تمرینها
۱. برنامهای بنویسید که یک رشته گرفته و تعداد کاراکترهای حرف بزرگ (uppercase) را بشمارد.
۲. برنامهای بسازید که نام و نام خانوادگی را گرفته و به شکل "نام خانوادگی، نام"
نمایش دهد.
۳. برنامهای برای جستجو و جایگزینی یک کلمه در جمله بنویسید.
۴. برنامهای برای ترکیب دو رشته C-Style توسط کاربر ایجاد کنید.
۱۱. جمعبندی فصل
- رشتهها ابزار اصلی کار با متن هستند.
- در C++ هم از روش سنتی (C-Style) و هم از کلاس مدرن
std::string
میتوانید استفاده کنید. std::string
سادهتر و ایمنتر است، اما دانستن C-Style برای کار با کتابخانههای قدیمی ضروری است.