
Thanks for your idea. I have cases like this: /1/1 /1/2/3/2 Since the first string /1/1 is smaller than the /1/2 (1 is < 2) of the /1/2/3/2, I should able to stop comparison by looking at the 4th character (/1/2) of '/1/2/3/2'. So for cases like that, I would like to stop as soon as i can tell one string is shorter than the other, instead of splitting the whole string. On 2/17/07, Pavol Droba <droba@topmail.sk> wrote:
Hi,
Meryl Silverburgh wrote:
Hi,
I need to compare 2 strings in this format (a integer separator by '/': /1/1 /1/1/2 /1/1/3
so "/1/1" is less than "/1/1/2" and "/1/1/2" is less than " "/1/1/3".
Is there anything in Boost string library to help me to write such a comparison? Is there a string iterator which literates base on the separator '/'? My idea is to find an iterator to loop thru the string based on separator '/'.
There is a split_iterator which you can use. And there is a generic lexicographical_compare function.
I've got an idea that might work. But it is a little elaborate. First, tokenize your string using split, but store the result to vector<iterator_range>.
Then define a comparison function, that will take the two iterator_ranges and compare them. Note, that in this case, tha range should hold an integer string. Then simply use lexicographical_compare for the comparison.
vector<iterator_range> vec1; split(vec, s1); vector<iterator_range> vec2; split(vec, s2); if(lexicographical_compare(vec1, vec2, integer_compare)) { // s1 is less }
You can even throw away the vector, and directly create an iterator_range from the split_iterator. This way you may spare some unnecessary tokenization.
typedef split_iterator<string::const_iterator> string_split; iterator_range<string_split> r1( make_split_iterator(s1, is_any_of("/")), string_split())
iterator_range<string_split> r2( make_split_iterator(s2, is_any_of("/")), string_split())
if(lexicographical_compare(vec1, vec2, integer_compare)) { // s1 is less }
Best Regards, Pavol. _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users