Search…

std::string và Xử Lý Chuỗi trong C++

Trương Diễm HươngTrương Diễm Hương
04/09/20204 min read
Giới thiệu và hướng dẫn sử dụng thư viện std::string trong C++ xử lý chuỗi.

String

Khái niệm

Trong C++, lớp std::string hay đối tượng string là thể hiện tiêu biểu cho văn bản, cho phép thao tác với chuỗi một cách an toàn. Nói cách khác, string giảm thiểu tối đa các vấn đề phát sinh về bộ nhớ khi bạn thao tác với chuỗi trong C để tập trung vào toán chính.

Khác biệt giữa chuỗi trong C++ so với C

std::string trong C++ vẫn giữ tư tưởng thao tác xử lý chuỗi giống trong C. Tuy nhiên, nó hỗ trợ thêm một số tính năng khác.

C++ vẫn hỗ trợ việc thao tác với chuỗi trên mảng tĩnh như trong C,  và để dễ thao tác hơn C++ hỗ trợ thêm lớp std::string. Nói cách khác, trong C++, chúng ta có thể thao tác với chuỗi trên bằng mảng tĩnh hoặc đối tượng thuộc lớp std::string.

Các thao tác xử lý chuỗi với std::string

Khai báo

Cú pháp:

// Them thu vien
#include <string>

// Khai bao
std::string <tên chuỗi>;

Ví dụ:

std::string str1;
str1 = "Xu ly chuoi";
string str2 = "bang std::string";
string str3;

Lấy chiều dài chuỗi

length() lấy chiều dài của chuỗi.

Ví dụ:

std::string str = "Xu ly chuoi";
cout << str.length() << endl;

Kết quả: 11.

Lấy 1 ký tự tại vị trí bất kỳ trong chuỗi

at(index) lấy ký tại vị trí index.

Ví dụ:

std::string str = "Xu ly chuoi";
cout << str.at(4) << endl;

Kết quả: y.

Nối 2 chuỗi

+ để nối 2 chuỗi.

Ví dụ:

std::string protocol = "https://";
std::string domain = "stdio.vn";

std::string link = protocol + "www." + domain;

Kết quả: https://www.stdio.vn.

So sánh chuỗi

Sử dụng các toán tử so sánh > == < để thực hiện so sánh 2 chuỗi theo vị trí trong từ điển.

Cú pháp:

<tên chuỗi thứ 1> <toán tử so sánh> <tên chuỗi thứ 2>

Ví dụ:

if (str1 > str2)
{
	cout << "str1 dung sau str2 trong tu dien!" << endl;
}

if (str1 == str2)
{
	cout << "Hai chuoi giong nhau!" << endl;
}

if (str1 < str2)
{		
	cout << "str1 dung truoc str2 trong tu dien!" << endl;
}

Tìm kiếm chuỗi con

find(pattern) tìm kiếm chuỗi pattern trong chuỗi target.

Trả về vị trí đầu tiên khi tìm thấy được pattern trong chuỗi target.

Ví dụ:

string target = "Welcome to STDIO Training";
string pattern = "to STDIO";

size_t pos = target.find(pattern);
cout << pos;

Kết quả: 8.

So sánh C string (string.h) và std::string (string)

So sánh sự khác biệt trong một số thao tác xử lý chuỗi trong ngôn ngữ C (thư viện string.h) và xử lý chuỗi trong ngôn ngữ C++ (thư viện std::string).

  • Truy cập vị trí bất kỳ
  • Lấy độ dài chuỗi
  • Nối 2 chuỗi
  • Sao chép chuỗi
  • So sánh 2 chuỗi

std::string

#include <string>
using namespace std;

int main()
{
	string str1 = "Welcome to ";
	string str2 = "STDIO Training";
	string str_temp;

	// Truy cap vi tri bat ky
	char c = str1.at(3);

	// Lay do dai chuoi
	site_t length = str1.length();

	// Noi 2 chuoi
	str_temp = str1 + str2;
 
	// Sao chep chuoi
	str_temp = str1;

	// So sanh 2 chuoi
	bool result1 = str1 < str2;
	bool result2 = str1 > str2;
	bool result3 = str1 == str2;
	
	return 0;
}

C string

#include <string.h>
 
int main()
{
	char str1[20] = "Welcome to ";
	char str2[20] = "STDIO Training";
	char str_temp[20];
	
	// Truy cap vi tri bat ky
	char c = str1[3];
	
	// Lay do dai chuoi
	site_t length = strlen(str1);
	
	// Noi 2 chuoi
	strcat(str_temp, str1);
	strcat(str_temp, str2);
 
	// Sao chep chuoi
	strcpy(str_temp, str1);
	
	// So sanh 2 chuoi
	int result = strcmp(str1, str2);
	
	return 0;
}

std::string không chỉ mở rộng chức năng mà còn:

  • Hỗ trợ trừu tượng hóa bằng phương pháp lập trình hướng đối tượng. Một trường hợp trong ví dụ trên, thay vì phải nhớ hàm strcat để nối 2 chuỗi như trong C, chỉ cần sử dụng toán tử + là có thể nối được 2 chuỗi lại một cách dễ dàng.
  • Hỗ trợ loại bỏ việc quá tập trung vào xử lý bộ nhớ thay vì nghiệp vụ chính.
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024