Lập trình

[C++] Tách chuỗi từ một từ đầu tiên nhập vào

Huy Erick

Trong lập trình, việc tách chuỗi thành từ riêng lẻ là một nhiệm vụ phổ biến. Trên ngôn ngữ lập trình C++, chúng ta cũng có thể thực hiện việc này một cách đơn giản...

Trong lập trình, việc tách chuỗi thành từ riêng lẻ là một nhiệm vụ phổ biến. Trên ngôn ngữ lập trình C++, chúng ta cũng có thể thực hiện việc này một cách đơn giản và hiệu quả. Bài viết này sẽ giúp bạn hiểu cách phân tách chuỗi thành các từ và in từng từ đó ra màn hình.

1. Bài toán tách từ trong chuỗi C++

Một bài toán thú vị đối với việc tách từ trong chuỗi là: "Cho một chuỗi bất kỳ, nhập từ bàn phím. Bạn muốn tách từ của chuỗi bắt đầu từ một từ cụ thể nào đó. Ví dụ: nhập chuỗi str1= “Khoa Công nghệ Thông tin, Viện Đại học Mở Hà Nội”. Nếu bạn muốn tách từ bắt đầu từ chữ “Viện”, kết quả sẽ là chuỗi “Viện Đại học Mở Hà Nội”.

2. Thuật toán tách chuỗi trong C++

2.1 Nhập chuỗi ký tự C++

Để nhập chuỗi trong C++, bạn cần bao gồm thư viện string. Đối với dữ liệu đơn giản, bạn có thể sử dụng đối tượng cin để đọc thông tin từ bàn phím. Tuy nhiên, cách này chỉ đọc một dãy ký tự liền nhau (không có khoảng trắng), nên sẽ chỉ trả về các ký tự đến khoảng trắng đầu tiên trong chuỗi bạn nhập. Vì vậy, để đọc đầy đủ chuỗi có chứa khoảng trắng từ bàn phím, bạn nên sử dụng hàm getline().

2.2 Tìm kiếm chuỗi cần tách

Để tìm một chuỗi cụ thể trong chuỗi ban đầu, bạn có thể sử dụng hàm find(). Cú pháp của hàm này như sau: base.find(str, pos). Trong đó:

  • base là chuỗi ban đầu
  • str là ký tự hoặc chuỗi cần tìm
  • pos là vị trí bắt đầu tìm kiếm. Nếu bỏ qua pos, hàm sẽ tiến hành tìm từ đầu chuỗi.

Hàm find() sẽ trả về vị trí đầu tiên của đối tượng cần tìm kiếm trong chuỗi ban đầu.

2.3 Tách chuỗi C++

Sau khi tìm thấy chuỗi và có vị trí bắt đầu tách, bạn có thể sử dụng hàm substr() để trích xuất chuỗi từ vị trí đó.

3. Giải thích các hàm liên quan

Dưới đây là một số hàm hữu ích để xử lý chuỗi trong C++:

  • s.length(): Trả về số lượng ký tự trong chuỗi s.
  • s.substr(x, y): Rút trích một chuỗi con từ vị trí x với chiều dài y.
  • s.erase(x, n): Xóa n ký tự bắt đầu từ vị trí x.
  • s.replace(x, n, str): Thay thế n ký tự bắt đầu từ vị trí x bằng chuỗi str.
  • s1.compare(s2): So sánh chuỗi s1 với chuỗi s2.
  • s1.swap(s2): Hoán đổi nội dung hai chuỗi.
  • s1.insert(index, s2): Thêm chuỗi s2 vào chuỗi s1 sau vị trí index.

Toàn bộ code hoàn chỉnh để tách chuỗi và in ra kết quả có thể tìm thấy dưới đây:

#include
#include
using namespace std;

int main() {
    string s1, s2;
    cout  "Nhập chuỗi bất kỳ: ";
    getline(cin, s1);
    cout  "Nhập chuỗi bắt đầu cần tách: ";
    getline(cin, s2);

    int pos = s1.find(s2);
    if (pos > 0) {
        cout  s1.substr(pos);
    }
    else {
        cout  "Không tìm thấy chuỗi";
    }

    return 0;
}

4. Kết quả

1