2012-04-04 32 views
19

Tôi có một chương trình được cho là đầu vào một vài tùy chọn để xác định xác suất trong biểu mẫu (p1, p2, p3, ...). Vì vậy, việc sử dụng dòng lệnh sẽ theo nghĩa đen là:Lấy một chuỗi con của một chuỗi `std ::` giữa hai vòng lặp

./myprog -dist (0.20, 0.40, 0.40) 

Tôi muốn phân tích danh sách như thế này trong C++ và tôi hiện đang cố gắng để làm điều đó với vòng lặp cho kiểu std :: string và chức năng chia được cung cấp bởi Boost.

// Assume stuff up here is OK 
std::vector<string> dist_strs; // Will hold the stuff that is split by boost. 
std::string tmp1(argv[k+1]); // Assign the parentheses enclosed list into this std::string. 

// Do some error checking here to make sure tmp1 is valid. 

boost::split(dist_strs, <what to put here?> , boost::is_any_of(", ")); 

Lưu ý phía trên phần <what to put here?>. Kể từ khi tôi cần phải bỏ qua sự khởi đầu và dấu ngoặc kết thúc, tôi muốn làm một cái gì đó giống như

tmp1.substr(++tmp1.begin(), --tmp1.end()) 

nhưng nó không giống như substr tác phẩm theo cách này, và tôi không thể tìm thấy một chức năng trong tài liệu mà làm việc để làm điều này .

Một ý tưởng tôi đã có được để làm iterator số học, nếu điều này được cho phép, và sử dụng substr gọi

tmp1.substr(++tmp1.begin(), (--tmp1.end()) - (++tmp1.begin())) 

nhưng tôi đã không chắc chắn nếu điều này được cho phép, hoặc nếu nó là một cách hợp lý để làm đi. Nếu đây không phải là một cách tiếp cận hợp lệ, thì cách nào tốt hơn? ...Rất cám ơn trước.

Trả lời

39

std::string hàm tạo nên cung cấp chức năng bạn cần.

std::string(tmp1.begin() + 1, tmp1.end() - 1) 
Các vấn đề liên quan