Trong lập trình, việc tách chuỗi hay tách xâu là một nhiệm vụ phổ biến, giúp phân chia một chuỗi thành những phần tử hay đoạn nhỏ hơn theo quy tắc xác định. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về các phương pháp tách chuỗi trong c++.
Xem thêm:
1. Tách chuỗi trong C++ là gì?
Tách chuỗi trong C++ là quá trình chia nhỏ một chuỗi ký tự thành nhiều phần riêng lẻ, dựa trên một tiêu chí như ký tự phân tách hoặc quy tắc nhất định.
Dưới đây là một ví dụ minh họa:
- Chuỗi gốc: “Khoa Công nghệ Thông tin, Viện Đại học Mở Hà Nội”.
- Kết quả tách từ: “Viện Đại học Mở Hà Nội” (bắt đầu từ từ khoá “Viện”).
2. Các phương pháp tách chuỗi trong C++
2.1. Nhập chuỗi có dấu cách
Trong C++, khi nhập chuỗi từ bàn phím, cin
chỉ đọc được chuỗi ký tự liền kề (không bao gồm khoảng trắng). Do đó, để nhập được chuỗi đầy đủ, ta cần dùng hàm getline()
:
string str; getline(cin, str); // Nhập chuỗi gốc có khoảng trắng
2.2. Tìm vị trí chuỗi con
Sử dụng hàm find()
để tìm vị trí chuỗi con trong chuỗi gốc:
base.find(str, pos);
Trong đó:
base
là chuỗi ban đầustr
là ký tự hoặc chuỗi string cần tìm từ trong basepos
là vị trí bắt đầu tìm kiếm. Nếu lược bỏpos
thì sẽ tiến hành tìm từ đầu string.
Hàm find()
sẽ trả về vị trí index tìm thấy đầu tiên của đối tượng cần tìm kiếm trong chuỗi ban đầu.
2.3. Trích xuất chuỗi con
Sau khi xác định vị trí, sử dụng hàm substr()
để trích xuất chuỗi con:
string result = str.substr(pos);
2.4. Tách từ trong chuỗi bằng dấu cách
#include <iostream> #include <sstream> using namespace std; int main() { string input, word; cout << "Nhap mot chuoi: "; getline(cin, input); // Nhập chuỗi từ bàn phím stringstream ss(input); // Tạo luồng xử lý chuỗi while (ss >> word) { // Lặp qua từng từ trong chuỗi cout << word << endl; // In từ ra màn hình } return 0; }
Input: Khoa Công nghệ Thông tin Output: Khoa Công nghệ Thông tin
2.5. Tách số trong chuỗi
Lọc và tách các chữ số trong chuỗi:
for (char c : str) { if (isdigit(c)) { cout << c; } } Input: Hello 123 C++ 456 Output: 123456
3. Giải thích các hàm liên quan
Hàm s.length()
Trả về số lượng ký tự trong string s.
string s1 = "introduction to programming"; cout<<"length of s1 = "<<s1.length();//27
Hàm s.substr(x, y)
Rút trích một chuỗi con với chiều dài y bắt đầu tại vị trí x. Nếu không có y, một chuỗi con từ vị trí x tới cuối chuỗi sẽ được rút trích.
string s1 = "introduction to programming"; cout<<"substring has 10 characters of s1 start at 5:"<<s1.substr(5, 10); //Kết quả: substring has 10 characters of s1 start at 5:duction to
Hàm s.erase(x, n)
Xóa n ký tự bắt đầu tại vị trí x.
string s1 = "introduction to programming"; s1.erase(5, 15); cout<<"s1 string after erase:"<<s1;//s1 string after erase:introramming
Hàm s.replace(x, n, str)
Thay thế n ký tự tại vị trí bắt đầu là x bằng chuỗi str. Lưu ý: chiều dài của str có thể lớn hơn n.
string s1 = "introduction to programming"; s1.replace(5, 10, "123123123"); cout<<"s1 string after replace:"<<s1;//s1 string after replace:intro123123123 programming
Hàm s1.compare(s2)
So sánh chuỗi s1 với s2. Giá trị trả về là -1 nếu s1 < s2, bằng 0 nếu s1 == s2, là 1 nếu s1 > s2.
string s1 = "introduction to programming"; string s2 = "c++ programming language"; cout<<"s1 compare s2:"<<s1.compare(s2);//1
Hàm s1.swap(s2)
Hoán đổi nội dung hai chuỗi.
string s1 = "introduction to programming"; string s2 = "c++ programming language"; s1.swap(s2); cout<<"s1 after swap:"<<s1<<endl; cout<<"s2 after swap:"<<s2; //Kết quả: //s1 after swap:c++ programming language //s2 after swap:introduction to programming
Hàm s1.insert(index, s2)
Thêm chuỗi s2 vào s1 sau vị trí index.
string s1 = "introduction to programming"; string s2 = "c++ programming language"; s1.insert(10, s2); cout<<"s1 after insert s2:"<<s1; //Kết quả: //s1 after insert s2:introductic++ programming languageon to programming
4. Code minh hoạ
4.1. Bài toán
Bài 26 (TH-CSLT-03): Nhập vào một chuỗi bất kỳ, sau đó hỏi người dùng cần tách bắt đầu từ một chuỗi nào đó nhập vào từ bàn phím trong chuỗi trở về sau.
Ví dụ: nhập chuỗi str1= “Khoa Công nghệ Thông tin, Viện Đại học Mở Hà Nội”.
Người nhập muốn tách bắt đầu từ chữ “Viện” thì sẽ xuất ra chuỗi “Viện Đại học Mở Hà Nội” ra màn hình.
4.2. Ví dụ mã nguồn
#include<iostream> #include<string> using namespace std; int main(){ string s1,s2; cout<<"Nhap chuoi bat ky:"; getline(cin,s1); cout<<"Nhap chuoi bat dau can tach: "; getline(cin,s2); int pos = s1.find(s2); if(pos>0){ cout<<s1.substr(pos); }else{ cout<<"Khong tim thay chuoi"; } }
5. Kết quả chạy chương trình
Trên đây là đoạn mã tách chuỗi cơ bản ngôn ngữ lập trình c++. Cảm ơn các bạn đã theo dõi trên ttnguyen.net
Tải full bài tập thực hành C/C++ có lời giải:
Bài viết cùng chủ đề: