C++ Các hàm xử lý chuỗi: strcpy(), strcat(), strlen(), strcmp()

⚡ Tóm tắt thông minh

C++ Các hàm xử lý chuỗi như strcpy, strcat, strlen và strcmp cho phép chương trình sao chép, nối, đo và so sánh văn bản. Tài liệu này giải thích chuỗi là gì, cách khai báo chuỗi kiểu C và std::string, truy cập giá trị của chúng và áp dụng các hàm xử lý chuỗi cơ bản với các ví dụ.

  • 🔤 Định nghĩa cốt lõi: Chuỗi ký tự là một dãy các ký tự; một C++ string là một đối tượng thuộc lớp std::string.
  • 🧱 Hai tuyên bố: C++ Hỗ trợ mảng ký tự kiểu C kết thúc bằng '\0' và kiểu lớp std::string an toàn hơn.
  • 📥 Truy cập các giá trị: Chuỗi ký tự được đọc và in theo tên, điều này được minh họa bằng cả mảng ký tự và std::string.
  • 🛠️ Các hàm xử lý chuỗi: strcpy sao chép, strcat nối chuỗi, strlen đo độ dài và strcmp so sánh hai chuỗi.
  • 📦 Tiêu đề bắt buộc: Các hàm xử lý chuỗi trong C nằm trong tệp tiêu đề cstring, tệp này phải được bao gồm trước khi sử dụng.

C++ Hàm chuỗi

Chuỗi là gì?

Một chuỗi là một chuỗi các ký tự. MỘT C++ Chuỗi (string) là một đối tượng của lớp std::string. Các ký tự được lưu trữ dưới dạng chuỗi byte, cho phép truy cập vào từng byte ký tự riêng lẻ.

C++ Chuỗi cấp phát bộ nhớ động. Có thể cấp phát thêm bộ nhớ cho chuỗi trong quá trình chạy nếu cần. Vì không có việc cấp phát bộ nhớ trước, nên không có sự lãng phí bộ nhớ. Chúng ta có thể thực hiện nhiều thao tác khác nhau trên chuỗi, bao gồm so sánh, nối chuỗi, chuyển đổi chuỗi, v.v.

Khai báo chuỗi

C++ hỗ trợ hai loại khai báo chuỗi:

  • Chuỗi ký tự kiểu C
  • Kiểu lớp chuỗi

Chuỗi ký tự kiểu C

Kiểu khai báo chuỗi này được giới thiệu trong Ngôn ngữ lập trình C. C++ Tiếp tục hỗ trợ nó. Nó đơn giản là một mảng ký tự một chiều kết thúc bằng ký tự null (\0). Một chuỗi kết thúc bằng null có các ký tự tạo nên chuỗi đó, theo sau là một ký tự null.

Hãy xem xét khai báo chuỗi được đưa ra dưới đây:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Khai báo trên tạo ra một chuỗi ký tự tạo thành từ "John". Từ này có 4 ký tự, nhưng chuỗi có kích thước là 5. Khoảng trống thừa cho phép chứa ký tự null.

Sử dụng quy tắc khởi tạo mảng, chúng ta có thể viết câu lệnh trên như sau:

char name[] = "John";

Lưu ý rằng bạn không cần phải đặt ký tự null ở cuối hằng chuỗi. C++ trình biên dịch sẽ tự động đặt '\0' ở cuối chuỗi khi khởi tạo mảng.

std :: string

Tiêu chuẩn này C++ Thư viện này cung cấp lớp chuỗi (string), hỗ trợ nhiều thao tác trên chuỗi. Nó được viết là std::string.

Để sử dụng lớp này, trước tiên chúng ta phải thêm nó vào không gian làm việc của mình bằng cách sử dụng bộ tiền xử lý #include như được hiển thị bên dưới:

#include <string>

Tiếp theo, chúng ta có thể khai báo chuỗi của mình bằng từ khóa string. Ví dụ:

string name = "John";

Câu lệnh trên sẽ tạo một chuỗi có tên name để giữ giá trị John.

Truy cập các giá trị chuỗi

In C++, chúng ta có thể truy cập các giá trị chuỗi bằng tên chuỗi. Ví dụ:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Đầu ra:

Truy cập các giá trị chuỗi

Đây là ảnh chụp màn hình của mã:

Truy cập các giá trị chuỗi

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng ta đọc và ghi vào bảng điều khiển.
  2. Bao gồm không gian tên std để sử dụng các lớp và hàm của nó mà không cần gọi nó.
  3. Gọi hàm main(), bên trong đó cần thêm logic của chương trình. Dấu { đánh dấu sự bắt đầu của phần thân hàm main().
  4. Khai báo một chuỗi ký tự và đặt tên cho nó. Chuỗi sẽ lưu trữ giá trị John. Không gian thừa sẽ lưu trữ ký tự null.
  5. In một số văn bản trên bảng điều khiển.
  6. In giá trị của chuỗi có tên name trên bảng điều khiển.
  7. Hàm main() sẽ trả về một giá trị nếu chương trình chạy tốt.
  8. Phần cuối của hàm main().

Đây là một ví dụ khác sử dụng C++ lớp chuỗi tiêu chuẩn:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Đầu ra:

Truy cập các giá trị chuỗi

Đây là ảnh chụp màn hình của mã:

Truy cập các giá trị chuỗi

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng ta đọc và ghi vào bảng điều khiển.
  2. Bao gồm lớp chuỗi tiêu chuẩn trong mã của chúng tôi.
  3. Bao gồm không gian tên std để sử dụng các lớp và hàm của nó mà không cần gọi nó.
  4. Gọi hàm main(), bên trong đó cần thêm logic của chương trình. Dấu { đánh dấu sự bắt đầu của phần thân hàm main().
  5. Khai báo một chuỗi và đặt tên cho nó là `name`. Chuỗi này sẽ lưu trữ giá trị. Guru99.
  6. In giá trị của tên chuỗi cùng với một số văn bản trên bảng điều khiển.
  7. Hàm main() sẽ trả về một giá trị nếu chương trình chạy tốt.
  8. Phần cuối của hàm main().

Các hàm chuỗi trong C++

Bạn sẽ thường muốn thao tác với chuỗi. C++ Cung cấp một loạt các chức năng mà bạn có thể sử dụng cho mục đích này. Các chức năng này được định nghĩa trong... Tệp tiêu đề (header) này cần được thêm vào mã để sử dụng các hàm. Chúng ta hãy cùng thảo luận một vài ví dụ:

strcpy ()

Đây là chức năng sao chép chuỗi. Nó sao chép một chuỗi thành một chuỗi khác.

Cú pháp:

strcpy(string1, string2);

Hai tham số của hàm, string1 và string2, đều là chuỗi ký tự. Hàm này sẽ sao chép chuỗi string2 vào chuỗi string1.

strcat ()

Đây là hàm nối chuỗi. Nó nối chuỗi.

Cú pháp:

strcat(string1, string2);

Hai tham số của hàm, string1 và string2, là các chuỗi cần được nối. Hàm trên sẽ nối chuỗi string2 vào cuối chuỗi string1.

strlen ()

Đây là hàm độ dài chuỗi. Nó trả về độ dài của chuỗi được truyền cho nó làm đối số.

Cú pháp:

strlen(string1);

Tham số string1 là tên của chuỗi có độ dài cần xác định. Hàm trên sẽ trả về độ dài của chuỗi string1.

strcmp()

Đây là hàm so sánh chuỗi. Nó được sử dụng để so sánh chuỗi.

Cú pháp:

strcmp(string1, string2);

Hàm trên sẽ trả về 0 nếu hai chuỗi string1 và string2 giống nhau, nhỏ hơn 0 nếu string1 < string2, và lớn hơn 0 nếu string1 > string2.

Ví dụ:

Ví dụ sau đây minh họa cách sử dụng các hàm chuỗi ở trên:

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

Đầu ra:

Các hàm chuỗi trong C++

Đây là ảnh chụp màn hình của mã:

Các hàm chuỗi trong C++

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi. Nó sẽ cho phép chúng ta đọc và ghi vào bảng điều khiển.
  2. Bao gồm cả tiêu chuẩn tiêu đề trong mã của chúng tôi.
  3. Bao gồm không gian tên std để sử dụng các lớp và hàm của nó mà không cần gọi nó.
  4. Gọi hàm main(), bên trong đó cần thêm logic của chương trình. Dấu { đánh dấu sự bắt đầu của phần thân hàm main().
  5. Khai báo một chuỗi gồm 10 ký tự và đặt tên cho nó là name1. Chuỗi này sẽ lưu trữ giá trị. Guru99.
  6. Khai báo một chuỗi gồm 10 ký tự và đặt tên là name2. Chuỗi sẽ lưu trữ giá trị John.
  7. Khai báo một chuỗi gồm 10 ký tự và đặt tên là name3.
  8. Khai báo một biến số nguyên tên là len.
  9. Sao chép chuỗi name1 vào chuỗi name3.
  10. In ra giá trị của chuỗi "name3" cùng với một số văn bản trên bảng điều khiển. Kết quả sẽ là: Guru99.
  11. Nối chuỗi name2 vào cuối chuỗi name1. Giá trị của name1 hiện là... Guru99Giăng.
  12. In ra giá trị của chuỗi "name1" cùng với một số văn bản trên bảng điều khiển. Kết quả sẽ là: Guru99Giăng.
  13. Xác định độ dài của chuỗi có tên name1 và gán giá trị độ dài đó cho biến len.
  14. In giá trị của biến len cùng với một số văn bản khác lên bảng điều khiển.
  15. Hàm main() sẽ trả về một giá trị nếu chương trình chạy tốt.
  16. Phần cuối của hàm main().

Câu Hỏi Thường Gặp

Đúng vậy. Trợ lý AI có thể chuyển đổi mảng ký tự thành std::string, cập nhật các hàm liên quan và giải thích lợi ích về an toàn. Tuy nhiên, các nhà phát triển vẫn nên xem xét lại các thay đổi để đảm bảo xử lý các trường hợp ngoại lệ, kích thước bộ đệm và hành vi dự định.

Đúng vậy. Các công cụ AI tạo ra các ví dụ đã được xử lý, giải thích cách hoạt động của strcpy và strcat, và cảnh báo các nguy cơ tràn bộ đệm. Điều này giúp tăng tốc độ hiểu, nhưng tự mình chạy mã vẫn là cách tốt nhất để xác nhận hành vi.

`std::string` quản lý bộ nhớ một cách linh hoạt và cung cấp các thao tác tích hợp sẵn như nối chuỗi và so sánh. Chuỗi kiểu C là các mảng ký tự cố định kết thúc bằng ký tự '\0', yêu cầu xử lý bộ nhớ thủ công và dễ xảy ra lỗi hơn.

Chúng có thể gây ra lỗi tràn bộ đệm nếu mảng đích quá nhỏ. Các giải pháp thay thế an toàn hơn bao gồm strncpy, strncat, hoặc đơn giản là sử dụng các thao tác std::string, vốn tự động quản lý bộ nhớ và giảm thiểu những rủi ro này.

Tóm tắt bài viết này với: