2012-12-14 32 views
5

Tôi đang cố gắng sử dụng split() chức năng cung cấp trong boost/algorithm/string.hpp trong hàm sau:C++ Tăng: Tách chức năng is_any_of()

vector<std::string> splitString(string input, string pivot) { //Pivot: e.g., "##" 
    vector<string> splitInput; //Vector where the string is split and stored 
    split(splitInput,input,is_any_of(pivot),token_compress_on);  //Split the string 
    return splitInput; 
} 

Cuộc gọi sau đây:

string hello = "Hieafds##addgaeg##adf#h"; 
vector<string> split = splitString(hello,"##"); //Split the string based on occurrences of "##" 

tách chuỗi thành "Hieafds" "addgaeg" "adf" & "h". Tuy nhiên tôi không muốn chuỗi được chia cho một #. Tôi nghĩ rằng rằng sự cố là với is_any_of().

Chức năng nên được sửa đổi sao cho chuỗi chỉ được phân chia bằng các lần xuất hiện của "##"?

+1

Hãy thử sử dụng split_regex: http://www.cplusplus.com/faq/sequences/strings/split/#boost-split-regex – user1284631

+0

Thanks =) Tôi đoán nó hoạt động. – Enigman

+1

cũng có, bạn có thể sử dụng iter_split (vec, str, first_finder ("##")); (xem câu trả lời này: http://stackoverflow.com/a/5710242/1284631) – user1284631

Trả lời

7

Bạn nói đúng, bạn phải sử dụng is_any_of()

std::string input = "some##text"; 
std::vector<std::string> output; 
split(output, input, is_any_of("##")); 

cập nhật

Nhưng, nếu bạn muốn chia vào chính xác hai sắc nét, có thể bạn phải sử dụng một cụm từ thông dụng:

split_regex(output, input, regex("##")); 

hãy xem documentation example.

+0

Xin chào, tôi xin lỗi. Tôi đã gặp lỗi khi đăng mã. Sửa ngay bây giờ ngay khi tôi nhìn thấy câu trả lời của bạn. Tôi có nghĩa là nếu tôi sử dụng 'is_any_of()' nó sẽ kiểm tra bất kỳ ký tự nào trong 'pivot' và chia nhỏ cho phù hợp. Nhưng tôi muốn chia nó chỉ khi trục khớp chính xác. – Enigman

+0

ah ok, hãy xem bản cập nhật! –

+0

Câu trả lời này không nên được bỏ phiếu vì nó đã trả lời một phiên bản gốc, hơi sai của câu hỏi (sau này đã được chỉnh sửa) – user1284631