Thomas Martitz wrote: > Bryan VanDyke wrote: >> Thomas Martitz wrote: >> >>> Bryan VanDyke wrote: >>> >>>> Thomas Martitz wrote: >>>> >>>> >>>>> Linus Nielsen Feltzing wrote: >>>>> >>>>>> Mike Holden wrote: >>>>>> >>>>>>> Maybe leading zeros should only be stripped if another digit follows >>>>>>> them? >>>>>>> >>>>>>> I use names like 00RockFaves.m3u, 00ClassicRock.m3u for playlists >>>>>>> that I >>>>>>> have created (as opposed to original artist albums), and the leading >>>>>>> zerozero is deliberately there to sort them at the top. >>>>>>> >>>>>> That's an interesting observation. I believe leading zeroes are >>>>>> treated like whitespace in the current code, but in this case I think >>>>>> that the final zero should be kept. >>>>>> >>>>>> Linus >>>>>> >>>>> That's not trivial, and adds complexity. You basically need to >>>>> look at >>>>> the current, the next, and one more for this, instead of just the >>>>> current char. >>>>> >>>>> >>>> Actually it not that bad. >>>> >>>> Pseudo code: >>>> >>>> get current >>>> get next >>>> while (current != null && next != null && current == '0' && next is a >>>> number) >>>> { >>>> current = next >>>> next = get next >>>> } >>>> >>>> >>>> >>> Now imagine this for every char in a string, and for every string in a >>> file list (with some 100 files). It's three-times (or even more) more >>> complexity than just. >>> while (is_zero(a)) >>> a = next; >>> >>> We're on embedded, and thus slow systems. Your would surely work well on >>> a desktop app, but for mp3-players we need fast and small code. The gain >>> has to justify the code, and I don't think it does it in this example. >>> >>> >> >> What about something like this. Taking in consideration the isspace >> function/comparison was removed? And isdigit is supposed to give nonzero >> on nodigit values. >> >> /* skip over leading zeros */ >> while ('0' == ca && nat_isdigit(ca_next) ) >> { >> ca = to_int(a[++ai]); >> ca_next = to_int(a[ai+1]); >> } >> >> >> > I've found a simpler solution for this. Trying the code raises the > following problem: > > 00 < 0b < 01 < 1
That look right. Zero is a valid number. A leading zero before a zero is still zero. 00 -> 0 0b -> 0b 01 -> 1 1 -> 1 01 == 1 strcmp -> 01 < 1 right? > > Zeros before except the final zeros are ignored, and the final zero > before characters is not ignored. But the leading zeros of numbers are > (so that 01 is 1). Obviously 0 sorts before 1. >