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 đầustr
là ký tự hoặc chuỗi cần tìmpos
là vị trí bắt đầu tìm kiếm. Nếu bỏ quapos
, 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ỗis
.s.substr(x, y)
: Rút trích một chuỗi con từ vị tríx
với chiều dàiy
.s.erase(x, n)
: Xóan
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ỗistr
.s1.compare(s2)
: So sánh chuỗis1
với chuỗis2
.s1.swap(s2)
: Hoán đổi nội dung hai chuỗi.s1.insert(index, s2)
: Thêm chuỗis2
vào chuỗis1
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;
}