Chi tiết bài học Chuỗi trong C++

Chuỗi trong C++

Trong bài này, bạn sẽ học cách làm việc với chuỗi (string) trong C. Bạn sẽ được học cách khai báo, khởi tạo và sử dụng chúng cho nhiều thao tác vào ra khác nhau.

Chuỗi là một tập các ký tự. Có hai dạng chuỗi thường được sử dụng trong ngôn ngữ lập trình C++:

  • Các chuỗi là đối tượng của lớp string (Lớp string của thư viện C++ chuẩn)

  • C-strings (Chuỗi dạng C)

C-Strings

Trong lập trình C, tập hợp các ký tự được lưu thành dạng mảng, C++ cũng hỗ trợ điều này. Vì vậy nó được gọi là các C-Strings.

C-strings là các mảng có dạng char được kết thúc bởi ký tự null, nghĩa là \0 (giá trị ASCII của ký tự null là 0).

Cách định nghĩa một C-string?

char str[] = "C++";

Trong đoạn mã trên, str là một chuỗi và nó có 4 ký tự.

Mặc dù, “C++” chỉ có 3 ký tự, nhưng ký tự null \0 tự động được thêm vào cuối của chuỗi.

Các cách khác để định nghĩa một chuỗi

char str[4] = "C++";
     
char str[] = {'C','+','+','\0'};

char str[4] = {'C','+','+','\0'};

Giống mảng, không cần thiết phải sử dụng toàn bộ không gian đã được cấp phát cho chuỗi này. Ví dụ:

char str[100] = "C++";

Ví dụ 1: Chuỗi C++ để đọc vào một từ

Chương trình C++ giúp in ra một chuỗi nhập vào bởi người dùng.

#include <iostream>
using namespace std;

int main()
{
    char str[100];

    cout << "Enter a string: ";
    cin >> str;
    cout << "You entered: " << str << endl;

    cout << "\nEnter another string: ";
    cin >> str;
    cout << "You entered: "<<str<<endl;

    return 0;
}

Đầu ra

Enter a string: C++

You entered: C++

 

Enter another string: Programming is fun.

You entered: Programming

Lưu ý rằng, trong ví dụ thứ hai chỉ “Programming” là được in rat hay vì “Programming is fun”.

Đó là bởi vì toán tử lấy ra >> hoạt động giống như scanf() trong C và sẽ coi dấu cách “ “ là một ký tự kết thúc.

Ví dụ 2: Chuỗi C++ để đọc vào một dòng chữ

Chương trình C++ giúp đọc vào và in ra một dòng chữ nhập vào bởi người dùng.

#include <iostream>
using namespace std;

int main()
{
    char str[100];
    cout << "Enter a string: ";
    cin.get(str, 100);

    cout << "You entered: " << str << endl;
    return 0;
}

Đầu ra

Enter a string: Programming is fun.

You entered: Programming is fun.

Để đọc vào chữ chứa khoảng trắng, hàm cin.get cần được sử dụng. Hàm này có hai đối số.

Đối số đầu tiên là tên của chuỗi (địa chỉ của ký tự đầu tiên của chuỗi) và đối số thứ hai là kích thước tối đa của mảng.

Trong chương trình trên, str là tên của chuỗi và 100 là kích thước tối đa của mảng.

Đối tượng chuỗi (string object)

Trong C++, bạn cũng có thể tạo một đối tượng chuỗi để chứa các chuỗi.

Không giống như các mảng ký tự, các đối tượng chuỗi không có chiều dài cố định, và có thể được mở rộng tùy theo nhu cầu của bạn.

Ví dụ 3: Chuỗi C++ sử dụng kiểu dữ liệu dạng chuỗi

#include <iostream>
using namespace std;

int main()
{
    // Khai báo một đối tượng chuỗi
    string str;
    cout << "Enter a string: ";
    getline(cin, str);

    cout << "You entered: " << str << endl;
    return 0;
}

Đầu ra

Enter a string: Programming is fun.

You entered: Programming is fun.

Trong chương trình này, một chuỗi str được khai báo. Sau đó chuỗi được yêu cầu nhập vào từ người dùng.

Thay vì sử dụng cin>> hoặc hàm cin.get(), bạn có thể đọc vào toàn bộ dòng chữ sử dụng getline().

Hàm getline() nhận luồng đầu vào là tham số đầu tiên, ở đây là cin và str là nơi dòng chữ đó sẽ được lưu.

Truyền chuỗi vào hàm

Chuỗi được truyền vào hàm theo cách giống với việc truyền mảng vào hàm.

#include <iostream>

using namespace std;

void display(char *);
void display(string);

int main()
{
    string str1;
    char str[100];

    cout << "Enter a string: ";
    getline(cin, str1);

    cout << "Enter another string: ";
    cin.get(str, 100, '\n');

    display(str1);
    display(str);
    return 0;
}

void display(char s[])
{
    cout << "Entered char array is: " << s << endl;
}

void display(string s)
{
    cout << "Entered string is: " << s << endl;
}

Đầu ra

Enter a string: Programming is fun.

Enter another string: Programming is fun.

You entered char array: Programming is fun.

You entered string: Programming is fun.

Trong ví dụ trên, hai chuỗi được yêu cầu nhập vào từ người dùng. Chúng được lưu lần lượt trong str và str1, với str là một mảng char và str1 là một đối tượng string.

Sau đó chúng ta có hai hàm display() giúp in ra chuỗi này trên chuỗi kia.

Sự khác biệt duy nhất giữa hai hàm đó là tham số. Hàm display() đầu tiên nhận tham số là một mảng char, trong khi hàm thứ hai nhận tham số là string.

Quá trình này được gọi là nạp chồng hàm.