Tôi muốn sử dụng chuỗi Tokenizer cho chuỗi CPP nhưng tất cả những gì tôi có thể tìm được là cho Char *. Có điều gì tương tự cho chuỗi CPP không?Trình mã thông báo chuỗi cho chuỗi CPP?
Trả lời
Bạn có ý nghĩa gì với "mã thông báo"? Nếu đó là một cái gì đó ngăn cách bởi bất kỳ khoảng trắng, các con suối chuỗi là những gì bạn muốn:
std::istringstream iss("blah wrxgl bxrcy")
for(;;) {
std::string token;
if(!(iss>>token)) break;
process(token);
}
if(!iss.eof()) report_error();
Ngoài ra, nếu bạn đang tìm kiếm một một nhân vật duy nhất cần phải phân loại nhất định, bạn có thể thay thế iss>>token
với std::getline(iss,token,sep_char)
.
Nếu có nhiều hơn một ký tự có thể hoạt động như một dấu tách (và nếu nó không phải là khoảng trắng), kết hợp std::string::find_first()
và std::string::substr()
sẽ làm.
+1 cho ba lựa chọn thay thế – Chubsdad
Có lý do chính đáng nào để thích 'for (;;)' over 'while (iss >> token)' (giả sử 'token' được khai báo trước vòng lặp) không? Trong ví dụ này, nó sẽ là một dòng ngắn hơn, và, theo ý kiến của tôi, ít nhất là không thể đọc được. –
@ Space_C0wb0y: (Bây giờ tôi chỉ hiểu được bình luận của bạn thôi. Ít nhất thì tôi nghĩ là mình ...) Tôi chỉ thích một biến cục bộ hơn là sự lặp lại của vòng lặp 'while'. – sbi
Check-out algos STL như find_first_of, find_first_not_of và vân vân để tạo ra một tùy chỉnh một.
Bạn có thể làm như đã nói bởi chubsdad hoặc sử dụng tăng tokenizer: http://www.boost.org/doc/libs/1_44_0/libs/tokenizer/tokenizer.htm
Làm điều đó một mình không phải là quá phức tạp nếu bạn đang affraid bởi Boost.
Đây là +1 từ chubsdad :) – Chubsdad
Bạn nên xem Boost Tokenizer
Hãy thử đoạn này tôi thấy ở đâu đó (thậm chí có thể quanh đây?):
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}
- 1. mã thông báo chuỗi trong Java
- 2. Trình mã thông báo tăng cường để xử lý chuỗi được trích dẫn dưới dạng một mã thông báo
- 3. Chuyển đổi mã thông báo tiền xử lý thành chuỗi
- 4. Nhận chuỗi con của mã thông báo trong vòng lặp?
- 5. Trình tạo mã chuỗi
- 6. Sử dụng biến chuỗi tạo tệp trong tệp CPP
- 7. Trích xuất mã thông báo từ một chuỗi với các cụm từ thông dụng trong .NET
- 8. Làm cách nào để biến macro thành chuỗi bằng cpp?
- 9. "Chuỗi thông báo" so với "Người trung gian"
- 10. Tạo mã thông báo CSRF
- 11. Tôi không thể nhận được giá trị chuỗi của mã thông báo
- 12. Chuỗi nhiều dòng Javascript và Mã thông báo không mong muốn ILLEGAL
- 13. Tách chuỗi bằng PowerShell và làm điều gì đó với mỗi mã thông báo
- 14. Trường hợp sử dụng nào cần #define mà không có chuỗi mã thông báo?
- 15. Strtok(), không khớp với mã thông báo
- 16. Mã thông báo truy vấn tìm kiếm giống như Google và tách chuỗi
- 17. Chuỗi C++ Khai báo
- 18. C# có một Trình mã hoá chuỗi như Java không?
- 19. Khai báo chuỗi C++
- 20. Lập trình mã thông báo OAuth theo lập trình cho tài khoản google
- 21. Làm cách nào để nhận URL chuỗi thông báo khi biết id chuỗi?
- 22. mã hóa và giải mã chuỗi?
- 23. Mã hóa CharsetNames cho Charset.forName (Chuỗi)
- 24. Zend Framework Twitter OAuth + Mã thông báo
- 25. Khai báo chuỗi Java
- 26. Làm cách nào để một chuỗi con có thể thông báo cho chuỗi chủ đề về trạng thái/tiến trình của nó?
- 27. Caveats Mã hóa chuỗi C# thành chuỗi Javascript
- 28. UDID cho thông báo đẩy thay vì mã thông báo thiết bị?
- 29. Nhận mã thông báo thiết bị cho thông báo đẩy sau khi ứng dụng bị xóa
- 30. Báo giá kiểu Perl cho chuỗi dài trong C++
Làm thế nào về một số ví dụ sau: http://www.codeproject.com/KB/recipes/Tokenizer. aspx Họ rất hiệu quả và phần nào thanh lịch. Thư viện String Toolkit làm cho việc xử lý chuỗi phức tạp trong C++ đơn giản và dễ dàng. –
có thể trùng lặp của [Sử dụng strtok với chuỗi tiêu chuẩn ::] (http://stackoverflow.com/questions/289347/using-strtok-with-a-stdstring) – bobobobo