Nhập vào một chuỗi bất kỳ, sau đó hỏi người dùng cần tách chuỗi 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.
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
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.
2. Ý tưởng
2.1 Nhập chuỗi
Để nhập chuỗi trong C++ trước tiên bạn bài #include thư viện string. Đối với các dữ liệu cơ bản, mình sử dụng đối tượng cin để đọc thông tin nhập vào từ bàn phím. Tuy nhiên, cách này sẽ xảy ra lỗi bởi vì cin chỉ cho phép đọc một dãy gồm các ký tự liền nhau (không có khoảng trắng), nên nó sẽ trả về các ký tự đến khoảng trắng đầu tiên trong chuỗi vừa nhập.
Vì vậy, mình sẽ sử dụng getline() để đọc đầy đủ chuỗi có khoảng trắng được nhập vào từ bàn phím
2.2 Tìm kiếm chuỗi cần tách
Mình sử dụng hàm find() để tìm chuỗi, cú pháp:
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 string ban đầu.
2.3 Tách chuỗi
Khi đã tìm thấy chuỗi và có vị trí bắt đầu. ta sử dụng hàm strsub() để trích xuất chuỗi từ vị trí pos.
3. Code
#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"; } }