×

Lấy chuỗi con với phương thức std::string::substr() trong C++

Trong lập trình C++, làm việc với chuỗi ký tự là một phần quan trọng và thường xuyên gặp phải. Một trong những thao tác cơ bản với chuỗi là lấy chuỗi con từ một chuỗi lớn hơn. Ngôn ngữ C++ cung cấp một phương thức hữu ích trong lớp std::string để thực hiện điều này, đó là phương thức substr(). Hãy cùng tìm hiểu cách sử dụng phương thức substr() để lấy chuỗi con một cách hiệu quả.

Cấu trúc của phương thức substr()

Phương thức substr() trong C++ cho phép bạn tạo ra một chuỗi con từ một chuỗi gốc. Cú pháp của phương thức này như sau:

std::string substr (size_t pos = 0, size_t len = npos) const;
  • pos: Vị trí bắt đầu của chuỗi con trong chuỗi gốc. Vị trí này được tính từ 0.
  • len: Độ dài của chuỗi con. Nếu không chỉ định, hoặc nếu len lớn hơn số ký tự có sẵn tính từ vị trí pos đến cuối chuỗi, chuỗi con sẽ kéo dài tới cuối của chuỗi gốc.

Ví dụ Cụ Thể

Dưới đây là một ví dụ cụ thể sử dụng substr() để lấy chuỗi con từ một chuỗi gốc.

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // Lấy chuỗi con từ vị trí số 7 đến hết chuỗi
    std::string subStr1 = str.substr(7);
    std::cout << subStr1 << std::endl; // Output: World!
    
    // Lấy chuỗi con từ vị trí số 0 với chiều dài 5
    std::string subStr2 = str.substr(0, 5);
    std::cout << subStr2 << std::endl; // Output: Hello
    
    return 0;
}

Các Tình Huống Sử Dụng Thường Gặp

Lấy tên file từ đường dẫn

Một tình huống phổ biến là lấy tên file từ một đường dẫn đầy đủ.

#include <iostream>
#include <string>

int main() {
    std::string filePath = "/user/local/bin/program.cpp";
    size_t pos = filePath.find_last_of('/');
    
    if(pos != std::string::npos) {
        std::string fileName = filePath.substr(pos + 1);
        std::cout << fileName << std::endl; // Output: program.cpp
    }
    
    return 0;
}

Tách phần mở rộng của tên file

Một ví dụ khác là tách phần mở rộng của tên file:

#include <iostream>
#include <string>

int main() {
    std::string fileName = "document.pdf";
    size_t pos = fileName.find_last_of('.');
    
    if(pos != std::string::npos) {
        std::string extension = fileName.substr(pos + 1);
        std::cout << extension << std::endl; // Output: pdf
    }
    
    return 0;
}

Lưu Ý Khi Sử Dụng substr()

  • Đảm bảo pos không vượt quá độ dài của chuỗi gốc, nếu không sẽ gây ra ngoại lệ std::out_of_range.
  • Khi không cần chỉ định len, có thể bỏ qua đáng giá này để lấy chuỗi con từ pos đến cuối chuỗi.

Phương thức substr() của lớp std::string là công cụ mạnh mẽ và linh hoạt, cho phép bạn dễ dàng thao tác và xử lý chuỗi ký tự trong C++ một cách hiệu quả. Bằng việc hiểu rõ và áp dụng những nguyên tắc cơ bản của phương thức này, bạn có thể nhanh chóng giải quyết nhiều bài toán liên quan đến xử lý chuỗi trong lập trình.

Comments