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

Trong ngôn ngữ lập trình, một trong những nhiệm vụ phổ biến khi xử lý chuỗi là tách từ trong chuỗi c++, tức là phân chia một chuỗi thành các từ riêng lẻ.

Bài viết dưới đây, chúng ta sẽ tìm hiểu cách phân tách một chuỗi thành các từ sử dụng quy tắc đơn giản dựa trên dấu cách, và sau đó in ra màn hình từng từ tách được.

Xem thêm:

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

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. 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++ 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 đầu
  • str là ký tự hoặc chuỗi string cần tìm từ trong base
  • pos 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 c++

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. 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

3. Code hoàn chỉnh

#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";
    }
}

4. Kết quả

Bài 25 xử lý chuỗi

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

Bài tiếp theo:Bài 27 (TH-CSLT-05): nhập bài thơ c++ gồm N câu thơ đặt trong các khổ thơ ngăn cách nhau bởi 1 dòng trống (N nhập từ bàn phím). Hiện bài thơ ra màn hình.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em