فصل ۸: رشته‌ها (Strings) در C++

""

۱. مقدمه: رشته چیست؟

در برنامه‌نویسی، رشته (String) به معنای توالی یا مجموعه‌ای از کاراکترها است که به صورت پشت‌سرهم ذخیره می‌شوند.
مثلاً نام یک شخص، آدرس یک وب‌سایت، یا یک جمله معمولی همه رشته هستند.

نمونه رشته‌ها:

"Ali"
"Hello, World!"
"12345"

حتی اعداد داخل رشته، دیگر به عنوان عدد محسوب نمی‌شوند، بلکه متن هستند.


۲. تفاوت رشته با کاراکتر

  • کاراکتر (char) فقط یک حرف، عدد یا علامت است.
    مثال: 'A', '7', '#'
  • رشته مجموعه‌ای از یک یا چند کاراکتر است.
    مثال: "Ali", "C++", "123"

۳. دو روش اصلی کار با رشته‌ها در C++

C++ دو روش مختلف برای کار با رشته‌ها دارد:

  1. رشته‌های سبک C (C-Style Strings) – با استفاده از آرایهٔ char و علامت پایان ('\0')
  2. کلاس 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-Stylestd::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 برای کار با کتابخانه‌های قدیمی ضروری است.
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *