Cách tách chuỗi trong C ++

How Split String C



Làm việc với dữ liệu chuỗi là một phần thiết yếu của bất kỳ ngôn ngữ lập trình nào. Đôi khi chúng ta cần chia nhỏ dữ liệu chuỗi cho các mục đích lập trình. Hàm split () tồn tại trong nhiều ngôn ngữ lập trình để chia chuỗi thành nhiều phần. Không có hàm split () tích hợp sẵn trong C ++ để tách chuỗi nhưng có nhiều cách tồn tại trong C ++ để thực hiện cùng một tác vụ, chẳng hạn như sử dụng theo hàng() hàm số, strtok () chức năng, sử dụng tìm thấy()tẩy xóa() các hàm, v.v. Việc sử dụng các hàm này để chia chuỗi trong C ++ đã được giải thích trong hướng dẫn này.

Điều kiện tiên quyết

Trước khi kiểm tra các ví dụ của hướng dẫn này, bạn phải kiểm tra trình biên dịch g ++ đã được cài đặt hay chưa trong hệ thống. Nếu bạn đang sử dụng Visual Studio Code, thì hãy cài đặt các phần mở rộng cần thiết để biên dịch mã nguồn C ++ nhằm tạo mã thực thi. Ở đây, ứng dụng Visual Studio Code đã được sử dụng để biên dịch và thực thi mã C ++.







Tách chuỗi bằng hàm getline ()

Hàm getline () được sử dụng để đọc các ký tự từ một chuỗi hoặc nội dung tệp cho đến khi tìm thấy dấu phân tách hoặc dấu phân tách cụ thể và lưu trữ mỗi chuỗi phân tích cú pháp thành một biến chuỗi khác. Hàm sẽ tiếp tục tác vụ cho đến khi toàn bộ nội dung của chuỗi hoặc tệp được phân tích cú pháp. Cú pháp của hàm này được đưa ra dưới đây.



Cú pháp:



istream&theo hàng(istream&là, chuỗi&str,charphân định);

Đây, tham số đầu tiên, isstream, là đối tượng mà từ đó các ký tự sẽ được trích xuất. Tham số thứ hai là một biến chuỗi sẽ lưu trữ giá trị được trích xuất. Tham số thứ ba được sử dụng để đặt dấu phân cách sẽ sử dụng để trích xuất chuỗi.





Tạo tệp C ++ với mã sau để tách một chuỗi dựa trên dấu phân cách bằng cách sử dụng theo hàng() hàm số. Giá trị chuỗi gồm nhiều từ đã được gán vào một biến và khoảng trắng đã được sử dụng làm dấu phân tách. Một biến vectơ đã được khai báo để lưu trữ các từ được trích xuất. Tiếp theo, vòng lặp ‘for’ đã được sử dụng để in từng giá trị từ mảng vectơ.

// Bao gồm các thư viện cần thiết
#bao gồm
#bao gồm
#bao gồm
#bao gồm

NSchủ chốt()
{
// Xác định dữ liệu chuỗi sẽ được chia nhỏ
giờ::dâystrData= 'Học lập trình C ++';
// Xác định dữ liệu liên tục sẽ hoạt động như dấu phân cách
hăng sô charngăn cách= '';
// Xác định biến mảng động của chuỗi
giờ::vectơoutputArray;
// Xây dựng một luồng từ chuỗi
giờ::stringstreamstreamData(strData);
/ *
Khai báo biến chuỗi sẽ được sử dụng
để lưu trữ dữ liệu sau khi tách
* /

giờ::dâygiờ;
/ *
Vòng lặp sẽ lặp lại dữ liệu đã tách và
chèn dữ liệu vào mảng
* /

trong khi (giờ::theo hàng(streamData, val, phân tách)) {
outputArray.push_back(giờ);
}
// In dữ liệu đã tách
giờ::Giá cả << 'Chuỗi ban đầu là:' <<strData<<giờ::endl;
// Đọc mảng và in dữ liệu đã tách
giờ::Giá cả << ' Các giá trị sau khi tách chuỗi dựa trên dấu cách: ' <<giờ::endl;
(tự động &giờ:outputArray) {
giờ::Giá cả <<giờ<<giờ::endl;
}
trở lại 0;
}

Đầu ra:



Kết quả sau sẽ xuất hiện sau khi thực hiện đoạn mã trên.

Tách chuỗi bằng hàm strtok ()

Hàm strtok () có thể được sử dụng để tách một chuỗi bằng cách mã hóa một phần của chuỗi dựa trên dấu phân cách. Nó trả về một con trỏ đến mã thông báo tiếp theo nếu nó tồn tại; nếu không, nó trả về giá trị NULL. Các string.h tệp tiêu đề được yêu cầu để sử dụng chức năng này. Một vòng lặp sẽ yêu cầu đọc tất cả các giá trị được tách từ chuỗi. Đối số đầu tiên chứa giá trị chuỗi sẽ được phân tích cú pháp và đối số thứ hai chứa dấu phân cách sẽ được sử dụng để tạo mã thông báo. Cú pháp của hàm này được đưa ra dưới đây.

Cú pháp:

char * strtok ( char *str,hăng sô char *dấu phân cách);

Tạo tệp C ++ với mã sau để tách một chuỗi bằng cách sử dụng hàm strtok (). Một mảng ký tự được xác định trong mã chứa dấu hai chấm (‘:’) làm dấu phân tách. Tiếp theo, strtok () hàm được gọi với giá trị chuỗi và dấu phân cách để tạo mã thông báo đầu tiên. Các ' trong khi 'Vòng lặp được xác định để tạo các mã thông báo khác và các giá trị mã thông báo cho đến khi VÔ GIÁ TRỊ giá trị được tìm thấy.

// Bao gồm các thư viện cần thiết
#bao gồm
#bao gồm

NSchủ chốt()
{
// Khai báo một mảng ký tự
charstrArray[] = 'Mehrab Hossain: IT Professional: [email được bảo vệ]: +8801726783423';
// Trả về giá trị mã thông báo đầu tiên dựa trên ':'
char *tokenValue= strtok(strArray,':');
// Khởi tạo biến đếm
NSquầy tính tiền= 1;
/ *
Lặp lại vòng lặp để in giá trị mã thông báo
và chia nhỏ dữ liệu chuỗi còn lại để lấy
giá trị mã thông báo tiếp theo
* /

trong khi (tokenValue!= VÔ GIÁ TRỊ)
{
nếu như(quầy tính tiền== 1)
printf('Tên:% s ', tokenValue);
khác nếu như(quầy tính tiền== 2)
printf('Nghề nghiệp:% s ', tokenValue);
khác nếu như(quầy tính tiền== 3)
printf('Email:% s ', tokenValue);
khác
printf('Số điện thoại di động:% s ', tokenValue);
tokenValue= strtok(VÔ GIÁ TRỊ,':');
quầy tính tiền++;
}
trở lại 0;
}

Đầu ra:

Kết quả sau sẽ xuất hiện sau khi thực hiện đoạn mã trên.

Tách chuỗi bằng các hàm find () và delete ()

Chuỗi có thể được tách trong C ++ bằng cách sử dụng các hàm find () và delete (). Tạo tệp C ++ với mã sau để kiểm tra việc sử dụng các hàm find () và delete () để phân chia một giá trị chuỗi dựa trên một dấu phân cách cụ thể. Giá trị mã thông báo được tạo bằng cách tìm vị trí dấu phân cách bằng cách sử dụng hàm find () và giá trị mã thông báo sẽ được lưu trữ sau khi loại bỏ dấu phân cách bằng cách sử dụng hàm xóa (). Tác vụ này sẽ được lặp lại cho đến khi toàn bộ nội dung của chuỗi được phân tích cú pháp. Tiếp theo, các giá trị của mảng vector sẽ được in ra.

// Bao gồm các thư viện cần thiết
#bao gồm
#bao gồm
#bao gồm

NSchủ chốt(){
// Xác định chuỗi
giờ::dâystringData= 'Bangladesh và Nhật Bản và Đức và Brazil';
// Xác định dấu phân tách
giờ::dâyngăn cách= 'và';
// Khai báo biến vector
giờ::vectơQuốc gia{};
// Khai báo biến số nguyên
NSChức vụ;
// Khai báo biến chuỗi
giờ::dâyoutstr, mã thông báo;

/ *
Tách chuỗi bằng hàm substr ()
và thêm từ đã tách vào vectơ
* /

trong khi ((Chức vụ=stringData.tìm thấy(ngăn cách)) !=giờ::dây::npos) {
mã thông báo=stringData.substr(0, Chức vụ);
// Loại bỏ khoảng trống thừa ở phía trước của chuỗi đã tách
Quốc gia.push_back(mã thông báo.tẩy xóa(0, mã thông báo.find_first_not_of('')));
stringData.tẩy xóa(0, Chức vụ+dải phân cách.chiều dài());
}
// In tất cả từ đã tách trừ từ cuối cùng
(hăng sô tự động &outstr:Quốc gia) {
giờ::Giá cả <<outstr<<giờ::endl;
}
// In từ được tách cuối cùng
giờ::Giá cả <<stringData.tẩy xóa(0, stringData.find_first_not_of('')) <<giờ::endl;
trở lại 0;
}

Đầu ra:

Kết quả sau sẽ xuất hiện sau khi thực hiện đoạn mã trên.

Phần kết luận

Ba cách khác nhau để chia một chuỗi trong C ++ đã được giải thích trong hướng dẫn này bằng cách sử dụng các ví dụ đơn giản để giúp người dùng python mới dễ dàng thực hiện thao tác chia trong C ++.